C++标准模板库(STL)map关联容器
一、定义与头文件
1. 定义
在C++中,map是一种关联容器。它以键 - 值(key - value)对的形式存储数据,其中键是唯一的,并且按照特定的顺序进行排列(默认是按照键的小于操作符进行升序排列)。例如,可以将学生的学号作为键,学生的成绩作为值存储在map中。
2. 头文件
需要包含<map>头文件才能使用map容器。
二、基本操作
1. 创建map对象
可以通过以下方式创建一个空的map:
std::map<int, std::string> myMap; // 这里创建了一个map,键为int类型,值为std::string类型。
也可以在创建时初始化:
std::map<int, std::string> myMap = { {1, "Alice"}, {2, "Bob"} };
2. 插入元素
使用insert方法:
myMap.insert(std::make_pair(3, "Charlie"));
或者使用下标操作符(如果键不存在则插入新元素,如果键存在则更新值):
myMap[4] = "David";
3. 查找元素
使用find方法。例如:
std::map<int, std::string>::iterator it = myMap.find(3);
如果it!= myMap.end(),则表示找到了键为3的元素,可以通过it->second访问对应的值。
4. 遍历map
可以使用迭代器遍历map。例如:
for (auto it = myMap.begin(); it!= myMap.end(); ++it) { std::cout << "Key: " << it->first << ", Value: " << it->second << std::endl; }
或者使用基于范围的for循环(C++11及以上):
for (const auto& [key, value] : myMap) { std::cout << "Key: " << key << ", Value: " << value << std::endl; }
5. 删除元素
使用erase方法。例如:
如果要删除键为3的元素:myMap.erase(3);
也可以通过迭代器删除:
auto it = myMap.find(3); if (it!= myMap.end()) { myMap.erase(it); }
三、元素排序
1. 默认排序
如前面所述,map默认按照键的小于操作符进行升序排列。对于自定义类型作为键时,需要定义小于操作符(operator<)。
2. 自定义排序
如果想要按照自定义的规则对map进行排序,可以使用std::map的模板参数指定比较函数对象。例如:
struct MyCompare { bool operator()(const int& a, const int& b) const { return a > b; } }; std::map<int, std::string, MyCompare> myMap;
这里创建的map将按照键的降序排列。
C++编程语言基础
- C++:从入门到工作的教程
- 这是我的第一个 C++程序!
- C++中main函数有什么作用?
- C++中 #include 指令的作用
- C++中常用的预处理指令
- C++中 iostream 头文件定义了什么
- C++名称空间(namespace)
- C++标准库中 std 命名空间定义了些什么
- C++常用的头文件
- C++源代码的发布方式
- C++变量名的定义、变量的作用、使用规范
- C++的关键字列表
- C++数据类型:整型(整数类型)
- 二进制补码、原码、反码
- C++数据类型:char字符型(整数类型)
- ASCII码表及C++字符函数库(cctype)
- 计算机汉字编码
- C++数据类型:bool类型(整数类型)
- C++中 const 限定符
- C++数据类型:浮点数
- C++运算符:算术运算符
- C++运算符:类型转换规则
- 计算机数据存储大小端模式
- C++运算符:位运算 与 bitset类库
- C++运算符:关系运算符与逻辑运算符
- C++流程控制:顺序、选择、循环、跳转语句
- C++函数的定义、参数传递、重载、嵌套
- C++数组:一维、二维、多维数组的运用
- C-style字符串、库函数 与 std::string对象
- C++数据类型:结构体(struct)
- C++数据类型:联合体(union)
- C++数据类型:枚举(enum)
- C++数据类型别名:typedef
- C++指针
- C++内存操作符:new分配 与 delete释放
- C++标准模板库(STL)容器、算法、迭代器
- C++标准模板库(STL)vector顺序容器
- C++标准模板库(STL)array固定容器
- C++标准模板库(STL)list双向链表容器
- C++标准模板库(STL)deque双端队列
- C++标准模板库(STL)集合 set 关联容器
- C++标准模板库(STL)map关联容器
- C++标准模板库(STL)unordered_set
- C++标准模板库(STL)unordered_map
- C++标准模板库(STL)algorithm算法库
- C++文件操作
- C++数学库(cmath)数学常量与数学函数
- C++模板:函数模板、类模板
- C++与SQLite3联合打造实用的应用程序
- C++实战开发中常用的库(概述)
- 第二部分:C++面向对象编程
- C++:类的定义与声明、类对象应用
- 第三部分:数据结构与算法(概述)
- 第一部分:C++语言简介与学习路线