std :: set <classtype> .find(element)是否使用类中的==运算符来比较元素?

时间:2015-06-24 19:23:58

标签: c++ time-complexity stdset

说我有

std::set<classtype> set;
class classtype {
    bool operator==(const classtype& ct) {
        //..
    } 
};
//..
std::set<classtype>::iterator it = set.find(element);

查找是否正确使用类中的==运算符?

我的引用也说它有log(n)最坏情况运行时,其中n是集合中元素的数量。这是如何在内部实现的?我知道关键是集合中的元素有一个顺序(因此插入需要很长时间才能创建该顺序),对于整数集,很明显是什么顺序意味着但对于随机类而言并非如此。

1 个答案:

答案 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