- STL中map的四种插入方法总结
方法一:pair
例:
map<int, string> mp;
mp.insert(pair<int,string>(1,“aaaaa”));
方法二:make_pair
例:
map<int, string> mp;
mp.insert(make_pair<int,string>(2,“bbbbb”));
方法三:value_type
例:
map<int, string> mp;
mp.insert(map<int,string>::value_type(3,“ccccc”));
方法四:[]
例:
map<int, string> mp;
mp[4] = “ddddd”;
四种方法异同:
前三种方法当出现重复键时,编译器会报错,而第四种方法,当键重复时,会覆盖掉之前的键值对。
- 统计个数用count
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main()
{
map<string,int> mp;
mp["nihao"]=2;
mp.insert(pair<string,int>("123",3));
cout << mp.count("nihao");
return 0;
} // 输出结果是1
- map按Key排序
#include<map>
#include<string>
#include<iostream>
using namespace std;
typedef pair<string, int> PAIR;
ostream& operator<<(ostream& out, const PAIR& p) {
return out << p.first << "\t" << p.second;
}
struct compare {
bool operator()(const string& k1, const string& k2) {
return k1.length() < k2.length();
}
};
int main() {
map<string, int , compare> mp;
mp.insert(pair<string, int>("LiMin",90));
mp.insert(map<string, int>::value_type("ZiLinMi",79));
mp["BoB"] = 92;
mp.insert(make_pair<string, int>("Bing",99));
mp.insert(make_pair("Albert",86));
for (map<string, int>::iterator iter = mp.begin();
iter != mp.end();
++iter) {
cout << *iter << endl;
}
return 0;
}
- 按Value排序
#include<map>
#include<string>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
typedef pair<string, int> PAIR;
bool com(const PAIR& k1, const PAIR& k2) {
return k1.second< k2.second;
}
int main() {
map<string, int> mp;
mp.insert(pair<string, int>("LiMin",90));
mp.insert(map<string,int>::value_type("ZiLinMi",79));
mp["BoB"] = 92;
mp.insert(make_pair<string,int>("Bing",99));
mp.insert(make_pair("Albert",86));
vector<PAIR> vec(mp.begin(), mp.end());
sort(vec.begin(),vec.end(),com);
for (int i = 0; i != vec.size(); ++i) {
cout << vec[i].first << "\t" << vec[i].second << endl;
}
return 0;
}