所以问题如下,我有一个multiset,我使用std :: equal_to运算符来比较元素,但是当我使用count()方法时,它表示我的multiset中的所有4个元素都是equal_to my count参数
std::multiset< std::string, std::equal_to< std::string > > mset;
mset.insert("C++");
mset.insert("SQL");
mset.insert("Jav");
mset.insert("C");
for(std::multiset<std::string>::iterator it = mset.begin(); it != mset.end(); ++it){
std::cout << *it << std::endl;
}
std::cout << std::endl;
std::cout << mset.count("STR");
输出为:4
如果我理解正确发生的事情是&#34; STR&#34; ==&#34; C ++&#34; ==&#34; SQL&#34; ==&#34; Jav&#34 ; ==&#34; C&#34; == TRUE。 这是我不明白的。
谢谢你的帮助。
答案 0 :(得分:0)
正如BobTFish在评论中已经说过的那样,如果第一个参数是第二个参数的“less”(必须在之前订购),则Compare
类型的std::multiset
应该返回true
。默认类型为std::less<Key>
。
答案 1 :(得分:0)
对于存储在std::multiset
中的元素,您必须定义strict weak ordering relation f(x, y)
。严格弱排序的一个属性是Irreflexivity,即f(x, x)
必须是false
。在严格的弱排序中违反了此属性,并且您得到了一些未定义的结果。
您可能想要的是使用std::unordered_multiset
代替。