首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据值对地图进行排序

根据值对地图进行排序
EN

Stack Overflow用户
提问于 2014-11-29 17:16:15
回答 3查看 96关注 0票数 3

假设我有一个std::map<std::string,int>,这个映射存储了一个id和一个债务金额。我想知道是否有一种方法可以从map中获得5个最高(int)值。我知道我可以遍历映射并进行自定义排序,但是有没有一种自定义算法可以帮助我做到这一点呢?最有效的方法是什么?

EN

回答 3

Stack Overflow用户

发布于 2014-11-29 17:21:07

仅当您在插入到地图时将它们保存在另一个位置并对其进行维护时。地图只是一张地图...得到最高的5在地图上是o(N)。如果您在插入时管理它们,则可以在o(1)中执行此操作

票数 2
EN

Stack Overflow用户

发布于 2014-11-29 17:21:45

创建地图std::map<int, std::string>并将旧地图中的所有数据插入到此地图中。则从新地图末尾开始的5个关键字具有最高值。

票数 0
EN

Stack Overflow用户

发布于 2014-11-29 18:35:45

您可以在map中构建迭代器的向量:

代码语言:javascript
运行
复制
#include <algorithm>
#include <iostream>
#include <vector>
#include <map>
#include <algorithm>

using namespace std;

int main()
{
    // make some data
    using data_map_type = map<string, int>;
    data_map_type data_map = {
        { "a", 10 },
        { "b", 5 },
        { "c", 3 },
        { "d", 3 },
        { "e", 4 },
        { "f", 1 },
        { "g", 2 },
        { "h", 5 },
        { "i", 0 },
        { "j", 2 },
        { "k", 1 },
    };

    // build reverse index (initially unordered)
    std::vector<data_map_type::const_iterator> second_index;
    for(auto it = begin(data_map) ; it != end(data_map) ; ++it)
        second_index.push_back(it);

    // order the secondary index by descending debt amount
    sort(begin(second_index),
         end(second_index),
         [](const data_map_type::const_iterator& l,
            const data_map_type::const_iterator& r)
         {
             return l->second > r->second;
         });

    // emit the top 5 (or fewer)
    const auto limit = std::min(second_index.size(), size_t(5));
    cout << "top " << limit << " entries:" << endl;
    for(size_t i = 0 ; i < limit ; ++i)
    {
        cout << "key=" << second_index[i]->first << ", value=" << second_index[i]->second << endl;
    }

    return 0;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27200694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档