说我有
std::set<classtype> set;
class classtype {
bool operator==(const classtype& ct) {
//..
}
};
//..
std::set<classtype>::iterator it = set.find(element);
查找是否正确使用类中的==运算符?
我的引用也说它有log(n)最坏情况运行时,其中n是集合中元素的数量。这是如何在内部实现的?我知道关键是集合中的元素有一个顺序(因此插入需要很长时间才能创建该顺序),对于整数集,很明显是什么顺序意味着但对于随机类而言并非如此。
答案 0 :(得分:3)
来自C ++标准(23.2.4关联容器)
3短语“等价键”是指等价关系 比较强加的而不是运营商==按键。那是, 如果对于,则认为两个密钥k1和k2是等价的 比较对象comp,comp(k1,k2)== false&amp;&amp; comp(k2,k1)== 假。对于同一容器中的任意两个键k1和k2,调用 comp(k1,k2)应始终返回相同的值。
成员函数find
根据比较对象comp
如果未明确指定比较对象,则该类默认使用在其运算符函数中使用std::less
的标准功能对象operator <
。所以你的班级必须有运营商&lt;定义
如果您想在集合中使用operator ==
作为比较值,则可以使用标准算法std::find
代替方法find
。