3.【C++map映射】

简介: 3.【C++map映射】

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;

}

代码展示:

1. #include <iostream>
2. 
3. #include <map>
4. 
5. using namespace std;
6. 
7. int main()
8. 
9. { 
10. 
11.   // map<key,vale> key_vale_a;
12. 
13.  map<int, char> stud_num_sex_map; //定义一个空的map对象
14. 
15.  int a=stud_num_sex_map.size(); // 容器的大小
16. 
17.  bool is=stud_num_sex_map.empty(); // 判断是否为空
18. 
19.  stud_num_sex_map[21032114] = 'm'; // 插入元素 ,中括号里面代表的是key,  
20. 
21.  stud_num_sex_map[21032116] = 's';
22. 
23.  char ch = stud_num_sex_map[21032114]; // 查找元素,即通过中括号
24. 
25.  //char ch1 = stud_num_sex_map[21032115]; //没有定义key,运行的时候不会报错,且初始化会为0
26. 
27.  if (stud_num_sex_map.count(21032115) <= 0) // 假如说不确定是否定义了key,我们可以用count查找,如果说<=0,就不存在
28. 
29.  {
30. 
31.   stud_num_sex_map[21032115] = 's'; // 给原本不存在key赋值
32. 
33.  }
34. 
35.  char ch2 = stud_num_sex_map[21032115];
36. 
37.   //stud_num_sex_map.erase(21032115); //删除21032115的key值
38. 
39.  //stud_num_sex_map.erase(stud_num_sex_map.begin()); // 不能用end,因为end值不能取到;
40. 
41.  map<int, char>::iterator itor; //
42. 
43.  for (itor = stud_num_sex_map.begin(); itor != stud_num_sex_map.end(); itor++)
44. 
45.  {
46. 
47.   int key = itor->first;
48. 
49.   char vale = itor->second;
50. 
51.   cout << key << " " << vale << endl;
52. 
53.  }
54. 
55.  return 0;
56. 
57. }

效果展示:

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


相关文章
|
3天前
|
Go
go语言中遍历映射(map)
go语言中遍历映射(map)
21 8
|
3天前
|
存储 算法 C++
【C++】unordered_map(set)
C++中的`unordered`容器(如`std::unordered_set`、`std::unordered_map`)基于哈希表实现,提供高效的查找、插入和删除操作。哈希表通过哈希函数将元素映射到特定的“桶”中,每个桶可存储一个或多个元素,以处理哈希冲突。主要组成部分包括哈希表、哈希函数、冲突处理机制、负载因子和再散列,以及迭代器。哈希函数用于计算元素的哈希值,冲突通过开链法解决,负载因子控制哈希表的扩展。迭代器支持遍历容器中的元素。`unordered_map`和`unordered_set`的插入、查找和删除操作在理想情况下时间复杂度为O(1),但在冲突较多时可能退化为O(n)。
12 5
|
1月前
|
Linux C++
Linux c/c++文件虚拟内存映射
这篇文章介绍了在Linux环境下,如何使用虚拟内存映射技术来提高文件读写的速度,并通过C/C++代码示例展示了文件映射的整个流程。
49 0
|
1月前
|
存储 算法 C++
【算法】哈希映射(C/C++)
【算法】哈希映射(C/C++)
|
2月前
|
Go
Golang语言之映射(map)快速入门篇
这篇文章是关于Go语言中映射(map)的快速入门教程,涵盖了map的定义、创建方式、基本操作如增删改查、遍历、嵌套map的使用以及相关练习题。
39 5
|
4月前
|
C++ 容器
【C++】map和set封装
【C++】map和set封装
39 2
|
4月前
|
存储 C++ 容器
【C++】map和set深度讲解(下)
【C++】map和set深度讲解(下)
64 2
|
4月前
|
存储 自然语言处理 Java
【C++】map和set深度讲解(上)
【C++】map和set深度讲解(上)
45 2
|
4月前
|
存储 算法 C++
C++一分钟之-扁平化映射与unordered_map
【7月更文挑战第5天】C++的STL `unordered_map`是键值对的快速查找容器,基于哈希表。常见问题包括哈希函数选择、键类型限制、内存管理和迭代顺序不确定性。要避免问题,需优化哈希函数,确保自定义类型支持哈希和比较操作,合理管理内存,不依赖迭代顺序。提供的代码示例展示了如何为自定义类型定义哈希函数并操作`unordered_map`。正确使用能提升代码效率。
49 0
C++一分钟之-扁平化映射与unordered_map
|
4月前
|
存储 C++ 索引