Таким образом, проблема заключается в следующем: у меня есть мультимножество, в котором я использую оператор 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 в комментарии, Compare
тип std::multiset
должен вернуться true
если первый аргумент «меньше» (должен быть упорядочен раньше), то второй аргумент. Тип по умолчанию std::less<Key>
.
Для элементов, хранящихся в std::multiset
вы должны определить строгое слабое отношение порядка f(x, y)
, Одним из свойств строгого слабого упорядочения является нерефлексивность, то есть f(x, x)
должно быть false
, Это свойство нарушено в вашем строгом слабом порядке, и вы получили некоторые неопределенные результаты.
То, что вы, вероятно, хотите, это использовать std::unordered_multiset
вместо.