我创建了一组 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++ 是如何工作的。
最佳答案
你是对的,set_object(x, y)
返回 false 并没有说明 x 是否小于 y 或者它们是否相等。所以 set 然后调用 set_object(y, x)
来找出答案。
关于C++:set 如何知道两个项目何时相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4530906/