因此,我决定使用多重映射而不是数组,以便我可以存储重复值以及其他一些值(作为一对)。 所以,当我宣布像
这样的多地图时multimap<int,int,less_equal<int> > M;
multimap<int,int,less_equal<int> >::iterator it,it2;
然后将所有元素插入其中,比如说
(10,1), (2,2), (8,3), (2,2), (8,1)
然后通过它迭代,我得到了我想要的东西:
2 2
2 2
8 1
8 3
10 1
但是现在,find函数不起作用 比如,如果我想找一个号码,请说
it2=M.find(temp);
其中temp是多图中存在的某个值,比如说8,它只是忽略它并且找不到它!当我没有包含less_equal时,find函数正在工作,但由于这是我想要的程序,现在我正在努力处理我的代码。有人可以建议补救吗?以及find无法正常工作的原因?
答案 0 :(得分:1)
关联容器的比较器必须对密钥类型产生严格的弱排序。 std::less_equal
不是严格的弱序。特别是,它并不严格,因为某些x <= x
x
(事实上,对于所有x
)。相反,您应该使用std::less
。
答案 1 :(得分:1)
比较器必须定义严格排序;也就是说,在比较两个等价值时,它必须返回false
。否则,依赖于此的逻辑将失败。特别是,find(temp)
查找等同于temp
的密钥,满足
!compare(key,temp) && !compare(temp,key)
除非排序严格,否则不会发生。
less
(默认比较器)是严格的; less_equal
不是,所以不能使用。
答案 2 :(得分:0)
你需要一个更少(不等于)的比较器。
如果符合以下条件,则两个键是等效的:
即,如果用于,则认为两个键k1和k2是等效的 比较对象comp,comp(k1,k2)== false&amp;&amp; comp(k2,k1)== 假的。
(来自23.2.4关联容器)