用C++中的比较器初始化set

mko*_*tya 2 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;
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢,
克斯特亚

Sin*_*all 5

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

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