C++ Map用法快速入门与详细整理

需积分: 1 1 下载量 41 浏览量 更新于2024-10-23 收藏 710B ZIP 举报
资源摘要信息:"C++ map用法总结" C++标准模板库(STL)中的map是一个关联容器,它允许通过键值对的方式存储数据,每个键值对通常被称作一个“元素”。map中的元素按照键的顺序存储,确保所有插入的元素都是有序排列的,这是由红黑树(一种自平衡的二叉搜索树)实现的,使得map能够在O(log n)的时间复杂度内完成查找、插入和删除操作。 ### 关键特性 1. **有序性**:map内部元素始终按照键值进行排序,不允许重复的键存在。 2. **关联容器**:通过键与值关联存储数据,可以快速通过键访问对应的值。 3. **动态数组**:map可以根据存储的数据动态调整大小。 ### map的基本操作 - **创建map容器**: ```cpp std::map<key_type, value_type> mymap; ``` - **插入元素**: - 使用`insert`函数插入元素对,例如: ```cpp mymap.insert(std::make_pair(key, value)); ``` - 使用`operator[]`直接通过键插入并赋值,例如: ```cpp mymap[key] = value; ``` - **查找元素**: - 使用`find`函数查找指定键的元素,例如: ```cpp auto it = mymap.find(key); if (it != mymap.end()) { // 元素存在,可以通过it->first访问键,it->second访问值 } ``` - 使用`operator[]`直接通过键访问值,如果键不存在则会插入一个新的元素对(键值初始化为默认值),例如: ```cpp int& value = mymap[key]; ``` - **删除元素**: - 使用`erase`函数删除指定键的元素,例如: ```cpp mymap.erase(key); ``` - 使用`erase`函数删除指定迭代器指向的元素,例如: ```cpp mymap.erase(it); ``` - **遍历map**: - 使用迭代器遍历map中的所有元素,例如: ```cpp for (auto it = mymap.begin(); it != mymap.end(); ++it) { // 访问每个键值对 } ``` - **获取大小和容量**: - 使用`size()`函数获取map中元素的数目。 - 使用`empty()`函数检查map是否为空。 ### map的高级特性 - **自定义排序**:通过提供自定义比较函数或函数对象来重载默认的比较操作。 - **自定义内存管理**:可以通过分配器(Allocator)来自定义内存分配策略。 - **map的子类**:例如`std::multimap`允许键值重复。 ### 使用示例 假设我们要创建一个map来存储学生成绩,其中键是学生的ID,值是分数。我们可以这样编写代码: ```cpp #include <iostream> #include <map> int main() { // 创建一个键为string类型,值为int类型的map std::map<std::string, int> scores; // 插入一些元素 scores["张三"] = 95; scores["李四"] = 85; scores["王五"] = 90; // 查找键为"李四"的元素 auto it = scores.find("李四"); if (it != scores.end()) { std::cout << "学生: " << it->first << " 的分数为: " << it->second << std::endl; } // 遍历map并打印所有键值对 for (auto it = scores.begin(); it != scores.end(); ++it) { std::cout << "学生: " << it->first << " 的分数为: " << it->second << std::endl; } return 0; } ``` 以上示例展示了如何创建map、插入元素、查找元素和遍历map。map提供了强大的功能来处理键值对集合,是处理有序数据集合的首选容器之一。