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

目录
相关文章
|
4月前
|
C++ 容器
【C++】map和set封装
【C++】map和set封装
35 2
|
4月前
|
存储 C++ 容器
【C++】map和set深度讲解(下)
【C++】map和set深度讲解(下)
61 2
|
4月前
|
存储 自然语言处理 Java
【C++】map和set深度讲解(上)
【C++】map和set深度讲解(上)
42 2
|
4月前
|
存储 算法 C++
C++一分钟之-扁平化映射与unordered_map
【7月更文挑战第5天】C++的STL `unordered_map`是键值对的快速查找容器,基于哈希表。常见问题包括哈希函数选择、键类型限制、内存管理和迭代顺序不确定性。要避免问题,需优化哈希函数,确保自定义类型支持哈希和比较操作,合理管理内存,不依赖迭代顺序。提供的代码示例展示了如何为自定义类型定义哈希函数并操作`unordered_map`。正确使用能提升代码效率。
44 0
C++一分钟之-扁平化映射与unordered_map
|
4月前
|
存储 C++ 索引
|
4月前
|
存储 C++
C++的list-map链表与映射表
```markdown C++ 中的`list`和`map`提供链表和映射表功能。`list`是双向链表,支持头尾插入删除(`push_front/push_back/pop_front/pop_back`),迭代器遍历及任意位置插入删除。`map`是键值对集合,自动按键排序,支持直接通过键来添加、修改和删除元素。两者均能使用范围for循环遍历,`map`的`count`函数用于统计键值出现次数。 ```
|
5月前
|
存储 自然语言处理 C++
【C++航海王:追寻罗杰的编程之路】set|map|multiset|multimap简单介绍
【C++航海王:追寻罗杰的编程之路】set|map|multiset|multimap简单介绍
42 0
【C++航海王:追寻罗杰的编程之路】set|map|multiset|multimap简单介绍
|
5月前
|
存储 算法 NoSQL
C++一分钟之-map与set容器详解
【6月更文挑战第21天】C++ STL的`map`和`set`是基于红黑树的关联容器,提供有序存储和高效查找。`map`存储键值对,键唯一,值可重复;`set`仅存储唯一键。两者操作时间复杂度为O(log n)。常见问题包括键的唯一性和迭代器稳定性。自定义比较函数可用于定制排序规则,内存管理需注意适时释放。理解和善用这些工具能提升代码效率。
61 3
|
5月前
|
存储 编译器 C++
|
4月前
|
存储 C++ 容器
【C++】开散列实现unordered_map与unordered_set的封装
【C++】开散列实现unordered_map与unordered_set的封装
51 0