【发布时间】:2019-05-03 17:12:43
【问题描述】:
现在我有一张地图,我需要按 value(int) 对其进行排序,如果有平局,则按 key(string) 对其进行排序。我知道我需要为此编写一个自定义的比较函数,但是到目前为止我还不能让它工作。 (我需要将我的东西存储在地图中,因为字符串是单词,整数是频率,我需要稍后通过搜索键来“找到”这些对)
【问题讨论】:
-
A
std::map<K, V>总是按键排序。因此,将其存储在不同的容器中,甚至可能是std::map<V, K>或std::multimap<V, K>。 -
地图不是这样工作的。除非你想进入新的透明比较的东西,但你仍然不会从中获得性能。您是否考虑过在数据容器旁边维护一个 index 容器?为什么你认为你需要先按值排序,然后按键排序?这纯粹是为了迭代目的吗?同样,如果您的迭代和查找有不同的要求,那么这就是您需要第二个类似视图的容器 IMO 的标志。在这里可能对您有用的一件事是bimap...
-
@Deduplicator 这只是移动了球门柱,因为现在你打破了 K 的查找。
-
也许填充
std::set<std::pair<std::string, int>>并为该集合提供您的比较功能会起作用吗?该集合应该可以通过您的地图迭代器构建。
标签: c++ sorting dictionary std