【发布时间】:2019-04-18 20:46:43
【问题描述】:
我希望使用 stl std::sort() 对 std::map 进行排序,但在 geeksforgeekside 上出现错误(无法粘贴整个错误,请参阅链接)
#include <bits/stdc++.h>
using namespace std;
int main() {
map<int,int> m{
{1,11},
{2,5},
{3,0}
};
sort(begin(m),end(m),[](auto a, auto b){return a.second < b.second;});
for(auto i: m)
cout<<i.first<<" "<<i.second<<endl;
return 0;
}
我试过了
sort(m.begin(),m.end(),[](pair<int,int> a, pair<int,int> b){returna.second < b.second;});
但问题仍然存在,std::map 没有 first、second 吗??
【问题讨论】:
-
std::map不能以这种方式工作。唯一可以实际排序的容器是std::vector。 -
@SamVarshavchik
std::deque和std::array想和你谈谈 -
std::vector<std::pair<const int, int>> v{m.begin(), m.end()}; std::sort(v.begin(), ..); -
我不明白为什么人们不赞成它?如果我已经知道我为什么要问这个问题?用我所缺少的参考链接写下评论比仅仅投反对票要好。
-
@Jarod42 这行不通,因为具有 const 数据成员的对不能复制/移动分配
标签: c++ stl c++14 stdmap stl-algorithm