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

标签 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++ 是如何工作的。

最佳答案

你是对的,set_object(x, y) 返回 false 并没有说明 x 是否小于 y 或者它们是否相等。所以 set 然后调用 set_object(y, x) 来找出答案。

关于C++:set 如何知道两个项目何时相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4530906/

相关文章:

python - python 中的正则表达式匹配以换行符分隔的字符串

c++ - C++ 中的 getline() 函数需要少 1 个输入

c++ - 用于将数组转换为 vector 的 Memcpy

c++ - 在 Symbian C++ 中将 unsigned char* 转换为 const TDesC8

java - 使用 ContentHandler 提取文件内容

python - 为什么 IPython 的 timeit 不能与集合文字一起使用?

c - C 中判断指针是否属于集合的最快方法是什么?

python - 如何使用 'set' 保持有序列表?

c++ - 逆向工程和理解复杂软件的最有效方法是什么?

c++ - 有什么好的方法可以控制手动缩进线之后的线吗?