map是一种关联式容器,它允许将键(key)映射到值(value),所以我们习惯称map为映射
每个元素都是一个键值对,其中键是唯一的
创建map
map<key类型, value类型> 变量名;创建一个键为int,值为string的map
map<int, string> a;插入元素
a[1] = "第一个字符串";
a[28] = "第二个字符串";
a[2] = "第二个字符串";
a[4] = "第二个字符串";我们这里是无序插入的,但实际上map自动替我们排了序,在后面遍历map的时候可以看出
访问元素
string str = a[1];或者
string str2 = a.at(2);查看元素是否存在(查看的是键值)
返回bool类型
a.count(1);删除元素(key)
a.erase(1);遍历(迭代器)
map<int, string>::iterator it;
for (it = a.begin(); it != a.end(); it++) {
	cout << "键:" << it->first << "\t";
	cout << "值:" << it->second;
	cout << endl;
}
输出:

可以看出map确实替我们排了序
入门题目:hdu 2648 shopping
解题代码来源于《算法竞赛:入门到进阶》
问题描述
每个女孩都喜欢购物,蒲公英也是如此。现在她发现店里每天都在涨价,因为春节快到了。她喜欢一家名为“memory”的商店。现在她想知道这家店的价格在每天变化后排名如何。
输入
一行连数n(n<=10000),代表商店数量。
然后是n行,每行包含一个字符串(长度小于31,只包含小写字母和大写字母)。代表商店的名称。
然后一行是数字 m (1<=m<=50),代表天数。
然后 m 个部分,每部分有 n 行,每行是数字 s 和一个字符串 p,代表这一天,商店 p 的价格上涨了 s。
输出
包含m行,在第i行中打印第i天后商店“memory”的排名。我们将排名定义为:如果有t家商店的价格高于“记忆”,则其排名为t+1。
示例输入
3
 memory
 kfc
 wind
 2
 49 memory
 49 kfc
 48 wind
 80 kfc
 85 wind
 83 memory
示例输出
1
 2
解题思路:本体的解题关键是如何处理排序,如果我们考虑数组,向量的话,如果两个数还好说,三个四个数就显然没办法用这种数据结构。这时,我们考虑使用键值对,来映射商店-价格的关系。然后从头遍历map,如果价格高于“memory”就把一个既定的值+1
#include <bits/stdc++.h>
using namespace std;
int main() {
	//n是商店数
	int n, m, p;
	//shop存放所有商店-价格的映射关系
	map<string, int> shop;
	while (cin >> n) {
		string s;
		//个人认为,这一句是为了消化输入的商店名,其实对程序没啥用,但是不得不写
		for (int i = 1; i <= n; i++) {
			cin >> s;
		}
		//m代表天数
		cin >> m;
		while (m--) {
			for (int i = 1; i <= n; i++) {
				cin >> p >> s;
				shop[s] += p;
			}
			//rank就是排的位置
			int rank = 1;
			map<string, int>::iterator it;
			for (it = shop.begin(); it != shop.end(); it++) {
				if (it->second > shop["memory"]) {
					rank++;
				}
			}
			cout << rank << endl;
		}
		shop.clear();
	}
	return 0;
}


















