c++的sort函数只能用于顺序容器,比如vector等。对于关联容器,map、set是以key为有序的,unordered_map等是无序的。
有些情况下我们需要用map的value值来排序,比如说按数值个数排序
c++的sort是有三个参数
void sort (RandomAccessIterator first, RandomAccessIterator last, bool comp);
(1)第一个参数first:是要排序的数组的起始地址。
(2)第二个参数last:是结束的地址(最后一个数据的后一个数据的地址)
(3)第三个参数comp是排序的方法:可以是从升序也可是降序。如果第三个参数不写,则默认的排序方法是从小到大排序。
第三个参数需要自定义。
bool cmp(type a, type b)
{
return a>b;
}
比较a和b,如果是想升序,那么就定义当a<b的时候返回true;
如果是想降序,那么就定义当a>b的时候返回true;
如果想让map按照value排序,且value相等时以key排序,那么我们需要将map元素存放于vector中,再使用自定义sort函数,满足我们的预期
vector<pair<float,int> > VecCount;
for(map<float,int>::iterator it = count.begin();it!=count.end();it++)
{
VecCount.push_back(pair<float,int>(it->first,it->second));
}
sort(VecCount.begin(),VecCount.end(),cmp);
cmp我们需要按照要求进行定义
bool cmp(pair<float,float> a,pair<float,float> b)
{
if(a.second == b.second)//如果value相等
{
return a.first<b.first;//则以key升序排序
}
return a.second > b.second;//按照value降序排序
}
662

被折叠的 条评论
为什么被折叠?



