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

Nik*_*lai 4 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;
Run Code Online (Sandbox Code Playgroud)

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

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

Ben*_*igt 5

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