1.map简介
map是STL的一个关联容器,以键值对存储的数据,其类型可以自己定义,每个关键字在 map中只能出现一次,关键字不能修改,值可以修改;map同set、multiset、multimap(与map的差别仅在于multimap允许一个键对应多个值)内部数据结构都是红黑树,而 java中的hashmap是以hash table实现的。所以map内部有序(自动排序,单词时按照字母序排序),查找 时间复杂度为O(logn)。
2.功能图解
3.map的三种插入
C++映射map的三种insert插入方式C++映射map的三种insert插入方式构建一个映射,并插入一个二元组。
方法1:
map<int,int> maps;
maps.insert(pair<intint>(10,15));
方法2:
map<int,int> maps;
maps.insert(make_pair(10,15))
方法3:
map<intint> maps;
typedefpair<intint> Int_Pair;
mapsinsert(Int_pair(10,15));
**注:**方法3和方法1相比只是代码形式变化了,成员使用是一样的
4.定义及其初始化属性
【定义格式】
map<key数据类型,valu数据类型> 函数名
【判断容器的大小】
函数名.size()
【判断容器是否为空】
函数名.empty() 结合 bool 使用 为真就是空
【插入元素利用中括号法】
函数名[key值]=valu值
【插入元素insert型】
函数名.insert(pair<key,valu>(key值,valu值))
函数名.insert(make_pair(key值,valu值))
【获得元素】
valu类型 函数名2=函数名[key值]
【如果没有定义key值不会报错,会初始化0】
======================
【判断是否定义了key值】
if(函数名.count(key)<=0) 没定义
if(函数名.count(key)>0) 定义
【删除指定key元素】
函数名.erase(指定key值)
【删除头元素】
函数名.erase(函数名.begin()) 不能用end
【迭代器遍历】
map<key,valu>::iterator 对象名;
for(对象名=函数名.begin(),对象名!=函数名.end;对象名++)
{
key类型 key=对象名->first;
valu类型 valu=对象名->second;
cout<<key<< valu<<endl;
}
代码展示:
#include <iostream>
#include <map>
using namespace std;
int main()
{
// map<key,vale> key_vale_a;
map<int, char> stud_num_sex_map; //定义一个空的map对象
int a=stud_num_sex_map.size(); // 容器的大小
bool is=stud_num_sex_map.empty(); // 判断是否为空
stud_num_sex_map[21032114] = 'm'; // 插入元素 ,中括号里面代表的是key,
stud_num_sex_map[21032116] = 's';
char ch = stud_num_sex_map[21032114]; // 查找元素,即通过中括号
//char ch1 = stud_num_sex_map[21032115]; //没有定义key,运行的时候不会报错,且初始化会为0
if (stud_num_sex_map.count(21032115) <= 0) // 假如说不确定是否定义了key,我们可以用count查找,如果说<=0,就不存在
{
stud_num_sex_map[21032115] = 's'; // 给原本不存在key赋值
}
char ch2 = stud_num_sex_map[21032115];
//stud_num_sex_map.erase(21032115); //删除21032115的key值
//stud_num_sex_map.erase(stud_num_sex_map.begin()); // 不能用end,因为end值不能取到;
map<int, char>::iterator itor; //
for (itor = stud_num_sex_map.begin(); itor != stud_num_sex_map.end(); itor++)
{
int key = itor->first;
char vale = itor->second;
cout << key << " " << vale << endl;
}
return 0;
}
效果展示:
如有未解地方,可私聊博主........