gpt4 book ai didi

c++ - multimap less_equal 导致错误的 find() 结果

转载 作者:行者123 更新时间:2023-11-28 02:56:51 27 4
gpt4 key购买 nike

因此,我决定使用多重映射而不是数组,这样我就可以将重复值与其他一些值(作为一对值)一起存储。所以,当我声明像这样的多 map 时

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

但是现在,查找功能不起作用比如,如果我想找到一个数字,比如

it2=M.find(temp);

其中 temp 是 multimap 中存在的某个值,比如 8,它只是忽略它并且找不到它!当我不包含 less_equal 时,查找函数可以正常工作,但由于这是我在程序中想要的,现在我正在为我的代码而苦苦挣扎。任何人都可以建议补救措施吗?以及 find 无法正常工作的原因?

最佳答案

比较器必须定义严格顺序;也就是说,当比较两个等值(value)时,它必须返回 false。否则,依赖于此的逻辑将失败。特别是,find(temp) 寻找与 temp 等价的键,它满足

!compare(key,temp) && !compare(temp,key)

除非顺序严格,否则不会发生这种情况。

less(默认比较器)是严格的; less_equal 不是,所以不能使用。

关于c++ - multimap less_equal 导致错误的 find() 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21785577/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com