3.【C++map映射】

发布于:2023-02-06 ⋅ 阅读:(712) ⋅ 点赞:(0)

 

1.map简介

map是STL的一个关联容器,以键值对存储的数据,其类型可以自己定义,每个关键字在 map中只能出现一次,关键字不能修改,值可以修改;map同set、multiset、multimap(与map的差别仅在于multimap允许一个键对应多个值)内部数据结构都是红黑树,而 java中的hashmap是以hash table实现的。所以map内部有序(自动排序,单词时按照字母序排序),查找 时间复杂度为O(logn)。

2.功能图解

 6d4b8b301d7249d6806849557346067e.jpg

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相比只是代码形式变化了,成员使用是一样的

3f51cc60a5f5454ab95ef3fa87e4c766.jpeg

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;

}

 效果展示:

06ace2b5482040debe66c7abe30ead09.png

如有未解地方,可私聊博主........

本文含有隐藏内容,请 开通VIP 后查看