std::set

std::set是C++标准库中的关联容器,基于红黑树实现,用于存储唯一且有序的元素。

基本特性

基本用法

包含头文件和声明

插入元素

查找和访问

删除元素

自定义比较函数

使用函数对象

自定义类型的set

迭代器操作

set的变体

multiset - 允许重复元素

unordered_set - 基于哈希表

高级技巧

使用场景选择

自定义哈希函数(用于unordered_set)

使用set实现集合运算

注意事项

元素不可修改性

迭代器失效

选择合适的容器

std::map

std::map 是 C++ 标准库中的关联容器,用于存储键值对(key-value pairs)。

基本特性:

  1. 有序性:元素按键(key)自动排序

  2. 唯一性:每个键只能出现一次

  3. 关联性:通过键来访问对应的值

  4. 动态大小:可以动态增加或删除元素

std::map 通常使用红黑树(Red-Black Tree)实现:

模板参数

基本用法

声明和初始化

插入元素

访问元素

查找和检查

删除元素

遍历

操作时间复杂度
插入O(log n)
删除O(log n)
查找O(log n)
遍历O(n)

常用成员函数

自定义比较器

map 的变体

std::multimap

std::unordered_map

std::unordered_multimap

实际应用示例

Tip

  1. 选择合适的容器

    • 需要有序:使用 std::map

    • 需要更快查找:使用 std::unordered_map

    • 允许重复键:使用 multimap 变体

  2. 访问方式

    • 确定键存在:使用 [] 操作符

    • 不确定键存在:使用 at()find()

  3. 性能优化

    • 大量查找操作:考虑 unordered_map

    • 需要范围查询:使用 map

    • 频繁插入删除:评估具体场景