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