微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何编写按值对地图进行排序的模板函数?

如何解决如何编写按值对地图进行排序的模板函数?

我想写一个函数,按值对地图容器进行排序。(不是键,对于键,我认为地图已经做到了)

我想把它做成模板,这样它就可以对 mapunordered_map 进行排序。按 doubleintstring 的值。

我的代码是:

#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;
  }
}

我从我的编译器那里得到一个乱七八糟的错误代码,太乱了,我看不懂。

错误似乎是因为我成对使用已删除operator =

有人可以帮忙吗?

解决方法

问题是value_type的{​​{1}}和mapunordered_map,注意第一个元素是std::pair<const Key,Value>,这使得{{1}包含 const 的 } 无法复制。

您可以将 vector 的类型更改为 std::pair<const Key,Value>,例如

vector

LIVE

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。