C++ map总结

简介: C++ map总结

目录


介绍


常用函数


函数实例


插入元素,并判断是否插入成功


遍历map


查找元素


删除元素


介绍

map是STL的一个关联容器,它提供一对一的hash。


第一个可以称为关键字(key),每个关键字只能在map中出现一次;

第二个可能称为该关键字的值(value);

map以模板(泛型)方式实现,可以存储任意类型的数据,包括使用者自定义的数据类型。Map主要用于资料一对一映射(one-to-one)的情況,map內部的实现自建一颗红黑树,这颗树具有对数据自动排序的功能。在map内部所有的数据都是有序的,如下图:

tt.png

常用函数

begin() 返回指向map头部的迭代器

clear() 删除所有元素

count() 返回指定元素出现的次数


empty() 如果map为空则返回true

end()   返回指向map末尾的迭代器


equal_range()    返回特殊条目的迭代器对


erase() 删除一个元素

find()  查找一个元素

insert()插入元素

max_size()返回可以容纳的最大元素个数

size()  返回map中元素的个数

swap()  交换两个map


get_allocator()  返回map的配置器

 key_comp()       返回比较元素key的函数

 lower_bound()    返回键值>=给定元素的第一个位置

 max_size()       返回可以容纳的最大元素个数

 rbegin()         返回一个指向map尾部的逆向迭代器

 rend()           返回一个指向map头部的逆向迭代器

  upper_bound()     返回键值>给定元素的第一个位置

  value_comp()      返回比较元素value的函数


函数实例

插入元素,并判断是否插入成功

#include <map>


#include <iostream>


using namespace std;



int main()


{



   map<int, string> myMap;


   // 第一种 用insert函數插入pair


   myMap.insert(pair<int,string>(01, "aa"));


   // 第二种 用insert函数插入value_type数据


   myMap.insert(map<int, string>::value_type(02, "bb"));


   // 第三种 用"array"方式插入


   myMap[33] = "cc";


   // 构造定义,返回一个pair对象,验证是否添加成功


   pair<map<int, string>::iterator, bool> Insert_Pair;


   Insert_Pair = myMap.insert(map<int, string>::value_type(33, "cc"));


   if (!Insert_Pair.second)


       cout << "Error insert new element" << endl;


   cout << "\n";


   return 0;


}


遍历map

#include <iostream>


#include <map>


using namespace std;



int main() {


   map<int, int> m;


   for (int i = 0; i < 5; i++) {


       m[i] = i * i;


   }


   //第一种遍历方式,迭代器+while


   map<int, int>::iterator iter;


   iter = m.begin();


   while (iter != m.end()) {


       cout << iter->first << "-" << iter->second << endl;


       iter++;


   }


   //第二种遍历方式,for+迭代器


   for (iter = m.begin(); iter != m.end(); iter++) {


       cout << iter->first << "-" << iter->second << endl;


   }


   //第三种遍历方式,for+auto


   for (auto &it : m) {


       cout << it.first << "-" << it.second << endl;


   }


   return 0;


}


查找元素

#include <iostream>


#include <map>


using namespace std;



int main() {


   map<int, int> m;


   for (int i = 0; i < 5; i++) {


       m[i] = i * i;


   }


 


   auto it = m.find(3);


   if (it != m.end())


   {


       int ss = (*it).second;//或者int ss=it->second


       cout << ss << endl;


   }


   return 0;


}


删除元素

#include <iostream>


#include <map>


using namespace std;



int main() {


   map<int, int> m;


   for (int i = 0; i < 5; i++) {


       m[i] = i * i;


   }


   //删除键为bfff指向的元素


   m.erase(4);


   //删除迭代器 key所指向的元素


   map<int, int>::iterator key = m.find(2);


   if (key != m.end())


   {


       m.erase(key);


   }


   //删除所有元素


   m.erase(m.begin(), m.end());


   return 0;


}


统计key的出现的次数


#include <iostream>


#include <map>


using namespace std;


int main() {


   map<int, int> m;


   for (int i = 0; i < 5; i++) {


       m[i] = i * i;


   }


   int c = m.count(1);


   cout << c << endl;


   return 0;


}


tt.png

tt.png

目录
相关文章
|
21天前
|
存储 C++ 容器
【C++】map、set基本用法
本文介绍了C++ STL中的`map`和`set`两种关联容器。`map`用于存储键值对,每个键唯一;而`set`存储唯一元素,不包含值。两者均基于红黑树实现,支持高效的查找、插入和删除操作。文中详细列举了它们的构造方法、迭代器、容量检查、元素修改等常用接口,并简要对比了`map`与`set`的主要差异。此外,还介绍了允许重复元素的`multiset`和`multimap`。
27 3
【C++】map、set基本用法
|
21天前
|
存储 算法 C++
【C++】unordered_map(set)
C++中的`unordered`容器(如`std::unordered_set`、`std::unordered_map`)基于哈希表实现,提供高效的查找、插入和删除操作。哈希表通过哈希函数将元素映射到特定的“桶”中,每个桶可存储一个或多个元素,以处理哈希冲突。主要组成部分包括哈希表、哈希函数、冲突处理机制、负载因子和再散列,以及迭代器。哈希函数用于计算元素的哈希值,冲突通过开链法解决,负载因子控制哈希表的扩展。迭代器支持遍历容器中的元素。`unordered_map`和`unordered_set`的插入、查找和删除操作在理想情况下时间复杂度为O(1),但在冲突较多时可能退化为O(n)。
18 5
|
21天前
|
存储 C++ 容器
【C++】map的模拟实现
C++中的`map`是STL中的一种关联容器,存储键值对且键唯一。`map`基于红黑树实现,自动按键排序,支持动态调整、复杂数据类型、丰富的成员函数及双向迭代器。插入、查找等操作保证了对数时间复杂度,适用于需要快速查找和有序存储的场景。
19 3
|
5月前
|
C++ 容器
【C++】map和set封装
【C++】map和set封装
41 2
|
5月前
|
存储 C++ 容器
【C++】map和set深度讲解(下)
【C++】map和set深度讲解(下)
64 2
|
5月前
|
存储 自然语言处理 Java
【C++】map和set深度讲解(上)
【C++】map和set深度讲解(上)
48 2
|
5月前
|
存储 算法 C++
C++一分钟之-扁平化映射与unordered_map
【7月更文挑战第5天】C++的STL `unordered_map`是键值对的快速查找容器,基于哈希表。常见问题包括哈希函数选择、键类型限制、内存管理和迭代顺序不确定性。要避免问题,需优化哈希函数,确保自定义类型支持哈希和比较操作,合理管理内存,不依赖迭代顺序。提供的代码示例展示了如何为自定义类型定义哈希函数并操作`unordered_map`。正确使用能提升代码效率。
55 0
C++一分钟之-扁平化映射与unordered_map
|
5月前
|
存储 C++ 索引
|
5月前
|
存储 C++
C++的list-map链表与映射表
```markdown C++ 中的`list`和`map`提供链表和映射表功能。`list`是双向链表,支持头尾插入删除(`push_front/push_back/pop_front/pop_back`),迭代器遍历及任意位置插入删除。`map`是键值对集合,自动按键排序,支持直接通过键来添加、修改和删除元素。两者均能使用范围for循环遍历,`map`的`count`函数用于统计键值出现次数。 ```
|
6月前
|
存储 自然语言处理 C++
【C++航海王:追寻罗杰的编程之路】set|map|multiset|multimap简单介绍
【C++航海王:追寻罗杰的编程之路】set|map|multiset|multimap简单介绍
46 0
【C++航海王:追寻罗杰的编程之路】set|map|multiset|multimap简单介绍