按值排序std :: map

时间:2018-12-02 00:33:23

标签: c++ sorting dictionary std

现在我有一张地图,如果有平局,我需要先按value(int)对其进行排序,然后再按key(string)对其进行排序。我知道我需要为此编写一个自定义的比较函数,但是到目前为止,我还无法使它起作用。 (我需要将自己的东西存储在地图中,因为字符串是单词,而整数是频率,我将需要稍后通过搜索键来“查找”配对)

3 个答案:

答案 0 :(得分:1)

std::map只能按键(在您的情况下为字符串)排序。

如果您还需要按值对它进行排序,则需要创建一个std::multimap,并以int作为键,将string作为值,并通过迭代来填充在地图上。

或者,您也可以创建vector<pair<int,string>>,然后通过迭代在地图上填充该std::sort(),而只需使用override func prepare(for segue: UIStoryboardSegue, sender: Any?) { guard segue.identifier == "NowPlaying", let nowPlayingVC = segue.destination as? NowPlayingViewController else { return }

答案 1 :(得分:1)

您可以使用std::multiset<std::pair<int, std::string>>

答案 2 :(得分:0)

使用所提供的信息,这有点像个猜谜游戏,但是除非您改组大量数据,否则可能会这样做。

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) {
    // 
}