我创建了一组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时应返回false!

要澄清的是,这不是问题,只是试图弄清楚C++是如何工作的。

最佳答案

您说对了,set_object(x, y)返回false并没有说明x小于y还是相等。因此设置然后调用set_object(y, x)进行查找。

08-05 14:53