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

  

posted @ 2018-11-04 21:46  cs_wu  阅读(3815)  评论(0编辑  收藏  举报