在unordered_map中找出k个second最大的数据,可以通过以下步骤实现:

  1. 创建一个vector<pair<key_type, value_type>>来保存unordered_map中的数据。
  2. 将unordered_map中的数据复制到vector中。
  3. 对vector按照value进行排序,可以使用sort函数,并指定一个比较函数来比较pair的second值。
  4. 取出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最大的数据

在unordered_map中找出k个second最大的数据

原文地址: https://www.cveoy.top/t/topic/ie7x 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录