如何解决如何编写按值对地图进行排序的模板函数?
我想写一个函数,按值对地图容器进行排序。(不是键,对于键,我认为地图已经做到了)
我想把它做成模板,这样它就可以对 map
和 unordered_map
进行排序。按 double
或 int
或 string
的值。
我的代码是:
#include <iostream>
#include <vector>
#include <unordered_map>
#include <algorithm>
using namespace std;
template<typename T>
std::vector<typename T::value_type> sort_map(const T& m) {
std::vector<typename T::value_type> v(m.begin(),m.end());
std::sort(v.begin(),v.end(),[](const typename T::value_type& a,const typename T::value_type& b) { return a.second < b.second;});
return v;
}
int main() {
std::unordered_map<int,double> a = {{1,6},{2,5},{3,{4,3}};
auto v = sort_map(a);
for (auto & i : v) {
cout << "a[" << i.first << "] = " << i.second << endl;
}
}
我从我的编译器那里得到一个乱七八糟的错误代码,太乱了,我看不懂。
有人可以帮忙吗?
解决方法
问题是value_type
的{{1}}和map
是unordered_map
,注意第一个元素是std::pair<const Key,Value>
,这使得{{1}包含 const
的 } 无法复制。
您可以将 vector
的类型更改为 std::pair<const Key,Value>
,例如
vector
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。