C++关联式容器详解:map、set与unordered_map的原理与应用
一、学习目标与重点
本章将深入探讨C++标准库中最常用的关联式容器——map、set和unordered_map的核心原理与应用。通过学习,你将能够:
- 掌握关联式容器的基本特性与适用场景,理解它们在数据组织和查找方面的优势
- 熟练使用map容器,掌握键值对存储与访问的方法
- 理解set容器的集合特性,学会处理唯一元素的存储
- 了解unordered_map的哈希表实现,掌握快速查找的原理
- 学会选择合适的关联式容器,根据应用场景优化程序性能
- 培养键值对思维,将问题抽象为键值对的映射关系
二、关联式容器概述
2.1 关联式容器的基本概念
关联式容器是一种将元素与键值关联起来的数据结构,分为两类:
- 有序关联式容器:元素按键值有序存储,如map、set、multimap、multiset
- 无序关联式容器:元素按哈希值存储,如unordered_map、unordered_set、unordered_multimap、unordered_multiset
2.2 关联式容器的通用接口
所有关联式容器都提供了通用的接口:
size():获取容器大小empty():判断容器是否为空begin()/end():获取迭代器insert():插入元素erase():删除元素clear():清空容器find():查找元素
三、map容器
3.1 map的基本特性
map是一个有序键值对容器,具有以下特性:
- 元素按键值有序存储(默认升序)
- 键值唯一,每个键对应一个值
- 支持快速查找(O(log n)时间复杂度)
- 插入和删除操作效率高(O(log n)时间复杂度)
3.2 map的使用方法
#include <iostream>
#include <map>
#include <string>
int main() {
std::cout << "=== map容器示例 ===" << std::endl;
// 创建 map
std::map<int, std::string> idToName;
std::map<std::string, > nameToAge;
idToName[] = ;
idToName[] = ;
idToName[] = ;
nameToAge[] = ;
nameToAge[] = ;
nameToAge[] = ;
std::cout << << idToName[] << std::endl;
std::cout << << nameToAge[] << std::endl;
std::cout << << std::endl;
( & pair : idToName) {
std::cout << << pair.first << << pair.second << std::endl;
}
std::cout << << std::endl;
(std::map<std::string, >::const_iterator it = nameToAge.(); it != nameToAge.(); ++it) {
std::cout << << it->first << << it->second << std::endl;
}
findResult = idToName.();
(findResult != idToName.()) {
std::cout << << findResult->second << std::endl;
}
idToName.(std::(, ));
std::cout << << std::endl;
( & pair : idToName) {
std::cout << << pair.first << << pair.second << std::endl;
}
idToName.();
std::cout << << std::endl;
( & pair : idToName) {
std::cout << << pair.first << << pair.second << std::endl;
}
std::cout << << idToName.() << std::endl;
std::cout << << idToName.() << std::endl;
std::cout << << (idToName.() > ) << std::endl;
;
}


