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.
И это то, что я не понимаю.

Спасибо вам за помощь.

0

Решение

Как уже сказал BobTFish в комментарии, Compare тип std::multiset должен вернуться true если первый аргумент «меньше» (должен быть упорядочен раньше), то второй аргумент. Тип по умолчанию std::less<Key>.

0

Другие решения

Для элементов, хранящихся в std::multiset вы должны определить строгое слабое отношение порядка f(x, y), Одним из свойств строгого слабого упорядочения является нерефлексивность, то есть f(x, x) должно быть false, Это свойство нарушено в вашем строгом слабом порядке, и вы получили некоторые неопределенные результаты.

То, что вы, вероятно, хотите, это использовать std::unordered_multiset вместо.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector