为什么我无法使用函数按值对地图进行排序?
Why can't I sort a map by values using a function?
我正在尝试按值对地图进行排序。我做了一个关于如何做到这一点的研究,最终得到了以下代码。但是,它不会编译,我不确定为什么。
#include <iostream>
#include <map>
#include <algorithm>
#include <iterator>
using namespace std;
bool cmp(pair<int,int> const & a, pair<int,int> const & b)
{
return a.second != b.second? a.second < b.second : a.first < b.first;
}
int main()
{
map<int,int>myMap;
for(int i=0,j=10;i<10;i++,j--)
{
myMap.emplace(i,j);
}
for(map<int,int>::iterator it=myMap.begin();it!=myMap.end();it++)
{
cout << it->first << " " << it->second << endl;
}
sort(myMap.begin(),myMap.end(),cmp);
for(map<int,int>::iterator it=myMap.begin();it!=myMap.end();it++)
{
cout << it->first << " " << it->second << endl;
}
return 0;
}
另一个
(技术上(可能的错误原因(除了它在语义上是无意义的,并且映射迭代器不是随机的,正如@myaut所说(是map
(和unordered_map
(底层值类型。在您的情况下,它实际上是std::pair<const int, int>
.所以:
- 您的比较函数将不接受它(它将尝试将引用绑定到错误的类型(
- 即使你修复了它,
sort
也会尝试移动值,分配它们。并且您不能分配给const
变量
std::map
总是按键排序。您需要先转换为对列表,然后排序列表。说到这里,std::sort
根据其原型需要随机迭代器:
template< class RandomIt >
void sort( RandomIt first, RandomIt last );
随机迭代器意味着std::sort
应该能够访问任何索引处的元素(即交换元素 1 和 3(。但是,索引访问对映射没有任何意义,因为它是由键而不是索引访问的。
例:
std::list<std::map<int,int>::value_type> list;
std::copy(myMap.begin(), myMap.end(), std::back_inserter(list));
list.sort(cmp);
相关文章:
- 是否有任何C++功能可以对地图进行排序?
- 如何使地图按值C++排序
- 我正在尝试按降序对地图进行排序,但没有得到预期的结果?
- 尝试按值对地图进行排序,但出现错误
- 对双精度地图进行排序
- 如何在OMNeT++中对地图进行排序?
- 多地图<矢量<int>>,字符>如何排序?
- 少的专业化<>适用于地图但不适用于排序
- 常量地图的意外排序
- C++按值对unordered_map或地图进行排序
- 如何对其中包含地图的列表进行排序
- 为什么我无法使用函数按值对地图进行排序?
- 如何在地图中插入对象以保持其排序
- 根据地图值的属性对地图进行排序
- C++,根据秒迭代对地图内容进行排序
- 如何以相反的顺序对地图进行排序
- 在 c++ 中对地图进行排序
- 获取按地图值排序的映射键向量的最快方法
- 标准::地图按值大小排序(设置<int>)
- 对基于地图C++集合重新排序的有效方法