STL set 集合裡面不能放結構體麼?
阿新 • • 發佈:2019-02-14
肯定可以,C++的設計哲學之一就是使得程式在對待自定義型別時和內建型別必須是一致的(甚至自定義型別的支援更好)。所以,肯定是你程式的問題,如下:
《C++標準程式庫》中明確指出:“只要是assignable、copyable、comparable(根據某個排序準則)的型別T,都可以成為set或multiset的元素型別。”。其中,所謂的comparable指的是less,即可進行<比較。
《C++標準程式庫》中明確指出:“只要是assignable、copyable、comparable(根據某個排序準則)的型別T,都可以成為set或multiset的元素型別。”。其中,所謂的comparable指的是less,即可進行<比較。
反之,則不被支援,所以,問題是,你的 struct 是否支援上述三種語義?
滿足assignable以及copyable,但是不滿足comparable,所以,它不能用於set容器。為了達到目的,需要做的就是新增一個對operator<的過載。
struct
A{
string str;
int
score;
};
bool
operator<(
const
A& lhs,
const
A& rhs) {
//still not pass~
return
lhs.score<rhs.score;
}
一直不明白為什麼greater和less、plus等等這種運算子器。。。。。。
multiset<int,
greater<int>> s;
bool
operator< (const Rect &r) const { ...... } // Finally compile succeed! pass !