STL set 集合里面不能放结构体么?

来源:互联网 发布:python图片文字识别 编辑:程序博客网 时间:2024/06/10 04:46
肯定可以,C++的设计哲学之一就是使得程序在对待自定义类型时和内置类型必须是一致的(甚至自定义类型的支持更好)。所以,肯定是你程序的问题,如下:
《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 !


原创粉丝点击