C ++ Multiset计数()

时间:2017-01-06 11:20:06

标签: c++ count insert equals multiset

所以问题如下,我有一个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。 这是我不明白的。

谢谢你的帮助。

2 个答案:

答案 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代替。