сортировка std :: map по значению - PullRequest
0 голосов
/ 02 декабря 2018

Сейчас у меня есть карта, и мне нужно отсортировать ее по значению (int), а затем по ключу (строке), если есть связь.Я знаю, что мне нужно было бы написать настраиваемую функцию сравнения для этого, однако до сих пор я не смог заставить ее работать.(Мне нужно хранить свои материалы на карте, поскольку строки - это слова, а целые - частоты, и мне нужно будет «найти» пары, выполнив поиск ключей позже)

Ответы [ 3 ]

0 голосов
/ 02 декабря 2018

Вы можете использовать std::multiset<std::pair<int, std::string>>

0 голосов
/ 02 декабря 2018

С предоставленной информацией, это немного игра в догадки, но если вы не тасуете огромные объемы данных, это может подойти.

using entry = std::pair<std::string, int>;
using CompareFunc = bool(*)(const entry&, const entry&);
using sortset = std::set<entry, CompareFunc>;
sortset bv(themap.begin(), themap.end(), [](auto& a, auto&b){ a.second!=b.second?a.second<b.second:a.first<b.first; });
for(const auto& d : bv) {
    // 
}
0 голосов
/ 02 декабря 2018

std::map можно отсортировать только по ключу (строка в вашем случае).

Если вам нужно также отсортировать его по значению, вам нужно создать std::multimap с ключом int в качестве значения и string в качестве значения и заполнитьэто, перебирая карту.

В качестве альтернативы, вы также можете создать vector<pair<int,string>>, который вы итерируете по карте и просто используете std::sort().

...