按值对具有未知键的贴图进行排序
Sorting a map with unknown keys by value
我有一个以下样式的映射:
mapa["01"]=2
mapa["111"]=3
它显示了每个子字符串在文本中出现的频率(文本由1和0组成)。
现在假设我想输出10个最常用的子字符串,我需要遍历映射中的所有键,并获得值最大的键(按值排序,降序)。我应该使用什么伪代码或命令?
如果这对你有用的话,我正在做这项任务,我得到了所有的值,我只是不知道如何排序。
您基本上需要使用比较器来实现一些top-k滤波算法
x < y if and only if mapa[x] < mapa[y]
有效地从列表中选择前k个包含在线程中存储数字流中最大的5000个数字:
基本思想是创建一个最小堆,它总是存储迄今为止遇到的前k个元素。完成后,堆包含流中的前K个元素。
另一种选择是使用选择算法来找到第十大元素,并生成所有大于它的元素(如果有重复的元素,则需要更多的工作)。
看到这个重复,您基本上迭代映射并对值使用std::partial_sort。
typedef std::pair<std::string, int> mypair;
struct IntCmp {
bool operator()(const mypair &lhs, const mypair &rhs) {
return lhs.second > rhs.second;
}
};
void print10(const std::map<std::string,int> &mymap) {
std::vector<mypair> myvec(mymap.begin(), mymap.end());
assert(myvec.size() >= 10);
std::partial_sort(myvec.begin(), myvec.begin() + 10, myvec.end(), IntCmp());
for (int i = 0; i < 10; ++i) {
std::cout << i << ": " << myvec[i].first
<< "-> " << myvec[i].second << "n";
}
}
相关文章:
- 二叉排序树无法编译
- 继承期间显示未知行为的子类
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- C++选择排序算法中的逻辑错误
- 使用C++程序合并排序没有得到正确的输出
- 计算排序向量的向量中唯一值的计数
- 排序算法c++
- 使用2个键的cpp-stl::优先级队列排序不正确
- 将结构向量排序为子组
- 在c++中尝试对对象数组进行排序时,出现std:bad_alloc错误
- 输入中的字符串数未知(以字母表示)
- 如何对点云数据进行排序
- 具有未知值时的时间复杂性
- 对字符串进行排序时,在c++中处理sort()
- 是否有类似std::lower_bound的函数,而不需要排序/分区输入
- 下面是排序算法O(n)吗
- std::sort()函数无法对向量的一部分进行排序
- 在最坏的情况下试验快速排序.它运行良好,但在最坏的情况下发生未知错误.我想
- 排序算法代码中的未知问题
- 按值对具有未知键的贴图进行排序