C++ map 以value排序,相等以key排序

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降序排序
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值