map的sort方法自定义cmp函数

由此可知,无序地图就是它的名字所暗示的 - 它是,嗯,无序。 你不能因此而订购它。

不幸的是,这个消息太过神秘,无法解释发生了什么。 基本上,C ++抱怨排序所需的map迭代器的属性,这在无序容器的迭代器上是不存在的。

如果要使用无序映射的数据创建一个有序容器,则需要将数据复制到可以订购的内容中,例如向量或数组:

vector<pair<char,int>> orderedCounts(charCount.begin(),charCount.end());
sort(orderedCounts.begin(), orderedCounts.end(), cmp);

https://www.codenong.com/39680832/

使用如下:

#include <iostream>
#include <map>
#include <unordered_map>
#include <algorithm>
using namespace std;
bool cmp(pair<int,int> &a,pair<int,int> &b){//&可有可无
    if(a.second==b.second){
    	return a.first<b.first;
	}
	return a.second<b.second;
}
int main()
{
	unordered_map<int,int> m;
	m[1]=100;
	m[2]=20;
	m[3]=3000;
	m[4]=100;
	m[5]=100;
	vector<pair<int,int>> v(m.begin(),m.end());
	sort(v.begin(),v.end(),cmp);
	for(auto t:v){
		cout<<t.first<<" "<<t.second<<endl;
	}
	
}

multipair的插入

multimap< int , char *> m;
  //multimap的插入只能用insert()不能用数组
  m.insert(pair< int , char *>(1, "apple" ));
     m.insert(pair< int , char *>(1, "pear" )); //apple和pear的价钱完全有可能是一样的
  m.insert(pair< int , char *>(2, "banana" ));

或者

multimap<string, string> authors;

	// 插入元素, 引入的头文件是 map
	authors.insert(make_pair(
		string("Evin"),   // 这个是 Key
		string("Hi")));

	authors.insert(make_pair(
		string("Evin"),   // 跟上面的一样,是同一个key
		string("Hello")));

leetcode 1356

class Solution {
public:
    int count(int n){
        int tmp=0;
        while(n!=0){
            tmp+=n%2;
            n=n/2;
        
        }
        return tmp;
    }
    static bool cmp(pair<int,int> a,pair<int,int> b){
        if(a.second==b.second){
        	return a.first<b.first;
	    }
	    return a.second<b.second;
    }
    vector<int> sortByBits(vector<int>& arr) {
        vector<int> ret;
        multimap<int,int> m;
        for(auto t:arr){
            m.insert(pair<int,int>(t,count(t)));
        }
        vector<pair<int,int>> v(m.begin(),m.end());
	    sort(v.begin(),v.end(),cmp);
        for(auto t:v){
            ret.push_back(t.first);
        }
        return ret;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值