【发布时间】:2013-05-07 22:55:01
【问题描述】:
假设我有一个 std::vector。假设向量包含数字。让我们来看看这个 std::vector
1,3,5,4,3,4,5,1,6,3
std::sort<std::less<int>> will sort this into
1,1,3,3,3,4,4,5,5,6,
我将如何修改排序,以便在排序的同时,它还计算同一级别的数字数量。所以说除了排序,还会编译下面的字典[level is also int]
std::map<level, int>
<1, 2>
<2, 3>
<3, 2>
<4, 2>
<5, 1>
<6, 1>
所以有 2 个 1、3 个 3、2 个 4,等等。
我 [认为] 我需要这个的原因是因为我不想对向量进行排序,然后再次计算每个级别的重复数。一次完成似乎更快?
谢谢大家! bjskishore123 是最接近我所要求的内容,但所有的回答都让我受益匪浅。再次感谢。
【问题讨论】:
-
您可以通过对元素使用 std::count 来单独创建地图。或遍历排序结果以自行构建地图。无需使排序过程复杂化。即使增强排序部分,映射所需的操作数也不应该减少。
-
一步完成可能并不快,两遍可能最快。
-
“一次完成似乎更快。”您甚至都没有一次性排序,因此这作为基线并不准确。您可以在 O(NlogN + N) 中执行此操作,相当于 O(NlogN),只需单遍扫描排序列表,递增出现对向量并在移动到排序列表中的新值时添加新对.我认为您不太可能得到比这更快的解决方案,特别是因为
sort()真的不在乎存在多少“多少”东西;相反,它只关心 ordering。但是,如果您只关心计数,则不需要地图或集合。