map的基本操作


 

向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;
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM