在unordered_map中找出k个second最大的数据
在unordered_map中找出k个second最大的数据,可以通过以下步骤实现:
- 创建一个vector<pair<key_type, value_type>>来保存unordered_map中的数据。
- 将unordered_map中的数据复制到vector中。
- 对vector按照value进行排序,可以使用sort函数,并指定一个比较函数来比较pair的second值。
- 取出vector中的前k个元素,即为k个second最大的数据。
下面是一个示例代码:
#include <iostream>
#include <unordered_map>
#include <vector>
#include <algorithm>
using namespace std;
bool compare(pair<int, int> a, pair<int, int> b) {
return a.second > b.second;
}
vector<int> findKMaxValues(unordered_map<int, int> umap, int k) {
vector<pair<int, int>> vec(umap.begin(), umap.end());
sort(vec.begin(), vec.end(), compare);
vector<int> result;
for (int i = 0; i < k && i < vec.size(); i++) {
result.push_back(vec[i].second);
}
return result;
}
int main() {
unordered_map<int, int> umap;
umap[1] = 10;
umap[2] = 5;
umap[3] = 15;
umap[4] = 8;
umap[5] = 20;
int k = 3;
vector<int> result = findKMaxValues(umap, k);
cout << "k max values: ";
for (int i = 0; i < result.size(); i++) {
cout << result[i] << " ";
}
cout << endl;
return 0;
}
输出结果为:
k max values: 20 15 10
这里使用了一个自定义的compare函数来比较pair的second值,使得排序后的vector中的元素按照second从大到小的顺序排列。然后取出前k个元素的second值,即为k个second最大的数据
原文地址: https://www.cveoy.top/t/topic/ie7x 著作权归作者所有。请勿转载和采集!