Map彙總

  1. 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”;

四種方法異同:
前三種方法當出現重複鍵時,編譯器會報錯,而第四種方法,當鍵重複時,會覆蓋掉之前的鍵值對。

  1. 統計個數用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
  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;  
 }  
  1. 按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;  
 }  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章