首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么不能根据值字段直接使用std::sort对std::map进行排序

为什么不能根据值字段直接使用std::sort对std::map进行排序
EN

Stack Overflow用户
提问于 2020-08-27 22:05:43
回答 3查看 103关注 0票数 0

我已经看到了很多根据std::map的值对其进行排序的解决方案。但是我想知道为什么不能像我写的代码那样直接使用std::sort对它进行排序。

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


void print_values(const std::map<size_t, size_t>& map_data) {
    for(const auto& my_pair : map_data)
        std::cout << my_pair.first << " : " << my_pair.second << "\n";
    std::cout << std::endl;
}

bool compare(const std::pair<size_t, size_t>& a, const std::pair<size_t, size_t>& b) {
    return a.second > b.second;
}

int32_t main(int32_t argc, char* argv[]) {
    std::map<size_t, size_t> coins_count;
    coins_count.insert(std::make_pair(1, 2));
    coins_count.insert(std::make_pair(2, 3));
    coins_count.insert(std::make_pair(3, 4));
    coins_count.insert(std::make_pair(4, 2));
    coins_count.insert(std::make_pair(5, 3));
    coins_count.insert(std::make_pair(6, 1));
    coins_count.insert(std::make_pair(7, 2));
    
    print_values(coins_count);
    
    std::sort(coins_count.begin(), coins_count.end(), compare);
    
    print_values(coins_count);

    return EXIT_SUCCESS;
}
EN

Stack Overflow用户

发布于 2020-08-27 22:35:24

根据定义,map的元素始终以排序的方式进行维护。

您可以使用模板参数自己定义这种顺序,但不能使用std::sort手动更改元素的顺序(即使没有交换任何元素,此调用也将失败)。

票数 0
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63617780

复制
相关文章

相似问题

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