区别

在C++标准模板库(STL)中,setmultisetunordered_setmapmultimapunordered_map是常用的容器,它们在存储和处理数据时各有特点。以下是它们的主要区别:

1. set

  • 特点set是一个存储唯一键值的有序容器。它不允许存储重复的元素。
  • 底层实现:通常基于红黑树,元素按照特定顺序排序。
  • 用途:适用于需要有序不重复元素集合的场景。

2. multiset

  • 特点:与set类似,但它允许存储重复的元素。
  • 底层实现:同样基于红黑树,元素自动排序。
  • 用途:适用于需要有序可重复集合的场景。

3. unordered_set

  • 特点:存储唯一键值的无序容器,不允许重复元素。
  • 底层实现:基于哈希表,元素无序存储。
  • 用途:适用于追求高效插入、删除和查找操作的场景,不关心元素顺序。

4. map

  • 特点:存储键值对,键唯一,自动根据键排序。
  • 底层实现:通常基于红黑树。
  • 用途:当需要根据键快速查找值时使用,适合需要有序键值对的场景。

5. multimap

  • 特点:与map类似,但允许键重复,即一个键可以映射多个值。
  • 底层实现:基于红黑树,元素自动按键排序。
  • 用途:适用于需要将单个键映射到多个值的有序键值对集合场景。

6. unordered_map

  • 特点:存储键值对,键唯一,但存储无序。
  • 底层实现:基于哈希表。
  • 用途:当不需要元素排序,且追求高效的插入、删除和查找操作时使用。

总结

  • 有序与无序setmultisetmapmultimap是有序容器,根据元素或键的顺序自动排序;而unordered_setunordered_map是无序容器,存储元素时不考虑顺序。
  • 唯一与非唯一setunordered_set只允许存储唯一元素,mapunordered_map的键是唯一的;而multisetmultimap允许存储重复的元素或键。
  • 底层数据结构:有序容器通常基于红黑树实现,保证了元素的有序性和较高的操作效率;无序容器基于哈希表实现,提供了快速的访问速度。

⬅️ stl哈希 🏠 00-刷题理模型 ➡️ 不同的数