[英]C++ Multiset count()
所以問題出在下面,我有一個多重集,在這里我使用std :: equal_to運算符比較元素,但是當我使用count()方法時,它說我多重集中的所有4個元素都等於我的counts參數。
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
如果我理解正確,那么發生的事情是“ STR” ==“ C ++” ==“ SQL” ==“ Jav” ==“ C” == true。 這是我不明白的。
感謝您的幫助。
正如BobTFish在評論中已經說過的那樣,如果第一個參數“小於”(必須在第二個參數之前排序),則std::multiset
的Compare
類型應該返回true
。 默認類型是std::less<Key>
。
對於存儲在std::multiset
元素,您必須定義嚴格的弱排序關系 f(x, y)
。 嚴格弱排序的屬性之一是Irreflexivity,即f(x, x)
必須為false
。 在嚴格的弱排序中違反了此屬性,並且您得到了一些未定義的結果。
您可能想要的是使用std::unordered_multiset
代替。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.