我遇到了如下代码:
#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/