由此可知,无序地图就是它的名字所暗示的 - 它是,嗯,无序。 你不能因此而订购它。
不幸的是,这个消息太过神秘,无法解释发生了什么。 基本上,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;
}
};