【发布时间】:2018-08-19 04:29:27
【问题描述】:
假设我有一个std::unordered_map<std::string, int>,它代表一个单词以及该单词在书中出现的次数,我希望能够按值对其进行排序。
问题是,我希望排序是稳定的,这样如果两个项目具有相同的值,我希望首先插入到地图的项目是第一个。
通过添加添加字段来实现它很简单,该字段将保持插入的time。然后,创建一个同时使用time 和value 的比较器。使用简单的std::sort 会给我O(Nlog(N)) 时间复杂度。
就我而言,只要可以改进时间,空间就不是问题。我想利用它并进行桶排序。这应该给我O(N) 时间复杂度。但是当使用桶排序时,没有比较器,当迭代地图中的项目时,不会保留顺序。
如何通过桶排序或其他方式使其既稳定又保持 O(N) 时间复杂度?
我想如果我有某种哈希映射在迭代时保留插入顺序,它会解决我的问题。
任何其他具有相同时间复杂度的解决方案都是可以接受的。
注意 - 我已经看到 this 和 that 并且由于它们都来自 2009 年并且我认为我的情况更具体,所以我提出了这个问题。
【问题讨论】:
-
示例不可能正确。如何区分两个相等的字符串?即使它们是带有字符串键的更复杂的对象,我也看不出会有什么困难。
-
@JiveDadson 如果它们相等,我将增加计数器。也许我没有得到你的问题。
标签: c++ sorting data-structures hashmap