我已经创建了一组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 ++是如何工作的。
答案 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
。这意味着x
和y
是相同的......
答案 3 :(得分:0)
如果a<b
和b<a
都是false
,则这些项目被视为等效。