c++ - 在 C++ 中使用比较器初始化集合

标签 c++ set comparator

我遇到了如下代码:

#include <iostream>
#include <set>

int main() {

   auto comp = [](int x, int y){return (x > y); };

   std::set<int, decltype(comp)> inversed({1,2,3,4,5}, comp);
   for ( auto i = inversed.begin(); i != inversed.end(); ++i ) {
      std::cout << *i << std::endl;
   }

   return 0;
}

代码打印“5 4 3 2 1”,即以相反的顺序初始设置。谁能解释为什么?比较器如何影响集合的初始化?

谢谢,
科斯佳

最佳答案

std::set使用比较器来确定元素的顺序。比较器的默认语义是“less”,这意味着如果在两个值 (A,B) 上运行比较器返回 true,那么 A 应该放在 B 之前。

在您的情况下,比较器执行相反的操作(如果 A 比 B“大”,则返回 true),这就是较大元素出现在较小元素前面的原因。

关于c++ - 在 C++ 中使用比较器初始化集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33498498/

相关文章:

c++ - 高效过滤一串文本中的单词

c++ - 'Source Stamping' 是如何工作的?

python - 如何 JSON 序列化集合?

c++ - 找到指向同一对象的两组指针之间的差异

python - 比较集合的交集并返回包含属于最大交集的集合的字典键的最快方法

java - 在流的排序方法中使用 Comparator::reverseOrder 和 Comparator.reverseOrder() 有什么区别

c++ - 是否有一个用于 std::set(或 std::map)的 STL 比较器,它带有提供基于值的查找的 shared_ptr 键? std::owner_less 究竟做了什么?

c++ - 模板特化 - clang 和 gcc 的不同结果

java - 为什么这个字符串比较器无法编译?

c++ - 遍历 boost mapped_region/memory-mapped 文件?