C++ 关于集合容器

C++ 关于集合容器,c++,stl,set,containers,multiset,C++,Stl,Set,Containers,Multiset,你好,我在研究集装箱的时候。我意识到,当我使用less_equal函数时,standart set容器的行为就像一个multiset容器。这正常吗?如果是,multiset和set之间的区别是什么 这正常吗 不,这不正常。您不能指定std::less_equal作为的比较器,因为它不满足严格的弱排序规则 请参阅要求。当您使用std::less_equal时,您使用集合、映射、多集合、多映射等对容器进行排序。要求您提供一个总排序功能。总订单意味着对于任何两个项目 运算B返回true,运算A返回f

你好,我在研究集装箱的时候。我意识到,当我使用
less_equal
函数时,standart set容器的行为就像一个multiset容器。这正常吗?如果是,multiset和set之间的区别是什么

这正常吗

不,这不正常。您不能指定
std::less_equal
作为的比较器,因为它不满足严格的弱排序规则


请参阅要求。

当您使用
std::less_equal
时,您使用
集合、映射、多集合、多映射等对容器进行排序。要求您提供一个总排序功能。总订单意味着对于任何两个项目

  • 运算B返回true,运算A返回false-A较小
  • op B返回false,op A返回true-B较小
  • 运算B返回false,运算A返回false,它们相等
对于这两个变量,可能没有任何返回true的值。std::less_equal不符合此要求;因此,容器以某种未定义的方式运行

考虑这相当于坐在沙发上,双腿向上。它不是设计来做这件事的。它可能会有一些看起来不错的结果,但不要指望它会继续这样工作。

这是“正常”的,因为没有异常的未定义行为。
std::set<int, std::less_equal<int>> myset = {1,1,7,8,2,2};
myset.insert(99);
myset.insert(99);
for(const int & val : myset)
    std::cout << val << " ";
1 1 2 2 7 8 99 99