1.定义
map是一个容器,容器中存在两个值,key和value。
key只能出现一次,而value可以重复。
2.性质
-
关联性:关联容器中的元素的参考地址指的是其 Key 值,而不是他们在容器中的绝对地址;
-
有序性:容器中的元素一直按照排序方式严格排序,所有插入元素都按照该顺序排列;
-
映射:每个元素中,一个 Key 值与一个映射值相关。Key 值是用来标识其主要内容是映射值的元素;
-
唯一 Key 值:容器中不存在同时拥有相同 Key 值的两个元素;
-
分配感知 (Allocator-aware):map 容器使用分配器对象动态处理其存储需求。
2.基本操作
(1)声明
map<int,string>m1;//直接
m1[1]="hello";
m1[2]=" ";
m1[3]="world";
m1[4]="!";
map<int,string>m2(m1);//复制
map<int,string>m3(m1.begin(),m1.end());//利用指针
(2)插入
map<int,string>m1;
m1[1]="hello";
m1[2]=" ";
m1[3]="world";
m1[4]="!";
//insert
m1.insert(pair<int,string>(8,"over"));//pair
m1.insert(map<int,string>::value_type(0,"zero"));//map
m1.insert(make_pair<int,string>(8,"good")); //make_pair
//数组用法
m1[5]="game";
(3)修改
//数组
int i =m1["a"];
m1["a"]=i;
//迭代器
map<int,string>::iterator it;
it.find("b");
int j=it->second;
it->second=j;
(4)删除
map<int,string>m1;
m1[1]="hello";
m1[2]=" ";
m1[3]="world";
m1[4]="!";
m1[7]="make";
map<int,string>::iterator it;//利用迭代器
it=m1.find(4);
m1.erase(it);
m1.erase(m1.begin(),m1.end());//erase
m1.clear();//清空
(5)遍历
map<int,string>::iterator it;
it = m1.begin();
for (it; it != m1.end(); it++)
{
//用 first 访问std::pair的第一个成员(Type1),second 访问第二个成员 (Type2)
cout<<it->first<<":"<<it->second<<endl;
}
(6)其他
my_Map.size() //返回元素数目
my_Map.empty() //判断是否为空