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
您好,我正在研究容器。我意识到当我使用less_equal
函数时,标准集容器就像多集合容器一样。这是正常的吗?如果是,multiset和set之间有什么区别?
答案 0 :(得分:4)
答案 1 :(得分:3)
使用std::less_equal<int>
时,您使用<=
对容器进行排序。当您插入第二个99
时,该集将运行其内部数据结构,以查找要插入99
的位置。它必须检查是否存在相同的值。 &#34;相同&#34;的定义对于关联容器是等价的。等价意味着容器使用!(a <= b) && !(b <= a)
来检查两个项是否具有相同的值。如果您将a
和b
替换为相应的值,您将获得:!(99 <= 99) && !(99 <= 99) => !(true) && !(true) => false && false => false
。因此,您无法将less_equal
用于关联容器。
答案 2 :(得分:2)
Set,map,multiset,multimap等。要求您提供总订购功能。总订单意味着任何两个项目
对于两个变体,可能没有任何值返回true。 std :: less_equal不符合这个要求;所以容器的行为方式有些不确定。
考虑这相当于坐在你的沙发腿上。它的设计并不是为了做到这一点。它可能会有一些看起来不错的结果,但不要指望它继续以这种方式工作。