向map添加元素:
因為map是不允許出現重復關鍵字的,所以如果重復插入鍵相同的元素后面的元素是不會插入成功的,下面是一個驗證程序:
#include<iostream> #include<algorithm> #include<map> #include<string> using namespace std; int main() { map<string, int> mmap; mmap.insert({ "wu",1 }); mmap.insert({ "xiao",1}); mmap.insert({ "wu",2 }); mmap.insert({ "xiao",8 }); for (auto it : mmap) { cout << it.first << " " << it.second << endl; } return 0; }
運行結果:
從運行結果我們可以知道,mmap的第三條個第四條插入語句時沒法插入成功的,因為前面已經對相同鍵值做過了插入操作,后面就不會再插入了。
如果想要四條語句都插入成功可以考慮用multimap,multimap是可以存在重復鍵值的,下面是驗證程序
#include<iostream> #include<algorithm> #include<map> #include<string> using namespace std; int main() { multimap<string, int> mmap; mmap.insert({ "wu",1 }); mmap.insert({ "xiao",1}); mmap.insert({ "wu",2 }); mmap.insert({ "xiao",8 }); for (auto it : mmap) { cout << it.first << " " << it.second << endl; } return 0; }
運行結果:
map容器最常用的方法——kv對計數,如果插入的元素還沒存在就插入,並給value賦值為1,如果插入的元素已經存在就不再插入而是給對應的鍵的值加1
#include<iostream> #include<algorithm> #include<map> #include<string> using namespace std; int main() { map<string, int> mmap; string str; while (cin >> str) { mmap[str]++; } for (auto it : mmap) { cout << it.first << " " << it.second << endl; } return 0; }
運行結果:
map的各種插入數據方式:
#include <iostream> #include<string> #include<vector> #include<map> using namespace std; int main() { map<string, int>mmap; mmap.insert(pair<string,int>("fsdfads", 43));//第一種插入方式 mmap.insert(map<string, int>::value_type("fsdf", 5));//第二種 mmap["fsdff"] = 3;//第三種 mmap.insert({ "fsd",4 });//第四種 for (auto it : mmap) { cout << it.first << " " << it.second << endl; } return 0; }
運行結果:
對map中的value進行排序
#include <iostream> #include<string> #include<vector> #include<map> #include<algorithm> using namespace std; int main() { map<string, int>mmap; vector<pair<string, int>>vec; mmap.insert(pair<string,int>("fsdfads", 43)); mmap.insert(map<string, int>::value_type("fsdf", 5)); mmap["fsdff"] = 3; mmap.insert({ "fsd",4 }); //將map的key和value以pair的形式裝到vector中,對vector進行排序。 for (auto it = mmap.begin(); it != mmap.end(); it++) { vec.push_back(make_pair(it->first, it->second)); } sort(vec.begin(), vec.end(), [](const pair<string, int>&x, const pair<string, int>&y) {return x.second < y.second; }); for (auto it : vec) { cout << it.first << " " << it.second << endl; } return 0; }
運行結果:
#include <iostream> #include <cstdlib> #include <map> #include <vector> #include <string> #include <algorithm> using namespace std; int cmp(const pair<string, int>& x, const pair<string, int>& y) { return x.second > y.second; } void sortMapByValue(map<string, int>& tMap, vector<pair<string, int> >& tVector) { for (map<string, int>::iterator curr = tMap.begin(); curr != tMap.end(); curr++) tVector.push_back(make_pair(curr->first, curr->second)); sort(tVector.begin(), tVector.end(), cmp); } int main() { map<string, int> tMap; string word; while (cin >> word) { pair<map<string, int>::iterator, bool> ret = tMap.insert(make_pair(word, 1)); if (!ret.second) ++ret.first->second; } vector<pair<string, int>> tVector; sortMapByValue(tMap, tVector); for (int i = 0; i < tVector.size(); i++) cout << tVector[i].first << ": " << tVector[i].second << endl; system("pause"); return 0; }