C ++:如何知道两个项目何时相等?

时间:2010-12-25 17:04:26

标签: c++ string set

我已经创建了一组C字符串,提供了我自己的比较器函数,因为我希望它只考虑前三个字符。这是它的定义:

struct set_object {
 bool operator()(const char* first, const char* second) {
        return strncmp(first, second, 3) > 0;
 }
};
std::set<const char*, set_object> c_string_set;

它按照我的意愿工作,在我按照我在set_object类中概述的方式添加字符串时对字符串进行排序。但是当我尝试添加一个比较等于已经添加的字符串的字符串时,有趣的部分开始了。例如,如果我在集合中已经存在“aaa”时尝试添加“aaab”,则不会将其添加到集合中。如果我先添加“aaab”,然后尝试添加“aaa”,它只列出“aaab”。但是如果我只提供了一个函数,当其中一个字符串更大时返回true,它怎么知道它们相等的时候呢?当它 等于或小于它时,它应该返回false!

澄清一下,这不是问题,只是想弄清楚C ++是如何工作的。

4 个答案:

答案 0 :(得分:5)

你是对的,set_object(x, y)返回false并不表示x是否小于y或它们是否相等。然后设置然后调用set_object(y, x)来查找。

答案 1 :(得分:2)

if (!less(first,second) && !less(second,first)) // equivalent!

如果一个人都不比另一个人小,那么他们是等价的(不相等,有一个非常微妙的区别)。

答案 2 :(得分:0)

如果商品x不大于或小于另一商品y。这意味着xy是相同的......

答案 3 :(得分:0)

如果a<bb<a都是false,则这些项目被视为等效

请参阅http://www.sgi.com/tech/stl/StrictWeakOrdering.html