Standard Template Library
在这一篇中我们 开始学习映射这个容器,即map。
1.头文件
#include
- 插入
插入需要是一对操作对象,有两种方法插入:
1.介绍常用的:
dict[“Key”] = value;
eg: dict[“Tom”] = 1; 含义是Tom是一班的
特别注意:如果key存在,那么不会插入新的value
所以可以判断以下key是否有对应的value,可以使用count,比如if(dict[“Tom”].count() == 0) dict[“Tom”] = 1;
2.不常用的:
需要引进一个pair对象,pair可以将两个值视为一个单元,若要生成一个pair对象,需要用到一个函数,make_pair(v1,v2),无需声明v1和v2类型。
eg:make_pair<v1,v2> p;
dict.insert§; - 访问
访问与数组类似,比如printf("%d",dict[“Tom”]); - count
- 遍历
与集合类似,需要用到迭代器。
map<int,int >::iterator it ;
for(it = dict.begin();it != dict.end();i++)
{
printf("%d"it->first);//表示键值
printf("%d",it->second); ///表示实值
} - dict.size(“key”)
- dict.clear()
#include <iostream>
#include <map>
using namespace std;
int main()
{
map<string,int> dict;
dict.insert(make_pair("Tom",1));
dict.insert(pair<string,int>("Mary",2));//两种插入方法
map<string,int>::iterator it;
//遍历映射
for(it = dict.begin();it != dict.end();it++)
{
printf("%s is in class %d\n",it->first.c_str(),it->second);
}
//输出时候先输出Mary因为在map中是按键值的字典顺序来排列的
dict["Jack"] = 3;
//由于原来没有Jack会在原来关系中新加入一个Jack的映射关系
printf("Jack is in class %d\n",dict["Jack"]);
//访问与数组类似
printf("named jack has %d\n",(int)dict.count("Jack"));
printf("size = %d\n",(int)dict.size());
dict.clear();
printf("size = %d\n",(int)dict.size());
//std::cout << "Hello world" << std::endl;
return 0;
}
与动态数组类似,也可以有二维map,就是map套map,也可以map套set,比如我们可以想象这么一个场景,就是有12345五个班级,每个班级有若干个学生这就是一个int和map的映射,详情我们后续在分析。