std::set

setmultisetunordered_set 是 C++ 标准库中的三种集合容器。它们都可以用于存储不重复的元素,但各自有不同的特性和用法。下面是它们的基本操作和区别:

1. set

set 是一种有序集合,内部实现通常是红黑树。它存储的元素自动按升序排列,且不允许重复元素。

常用操作:
  • 插入元素:
    • insert(const T& value):将 value 插入到集合中。
  • 删除元素:
    • erase(iterator pos):删除指定位置的元素。
    • erase(const T& value):删除指定值的元素。
  • 查找元素:
    • find(const T& value):返回指向 value 的迭代器,如果未找到则返回 end()
    • count(const T& value):返回集合中等于 value 的元素的数量(对于 set,只能是 0 或 1)。
  • 访问:
    • begin():返回指向第一个元素的迭代器。
    • end():返回指向尾后元素的迭代器。
    • rbegin()rend():返回反向迭代器。
  • 容量相关:
    • size():返回集合中元素的数量。
    • empty():判断集合是否为空。
  • 其他操作:
    • clear():清空集合。
    • swap(set& other):与另一个集合交换内容。

2. multiset

multisetset 类似,但允许存储重复的元素,其他操作基本相同。

特别之处:
  • 插入元素:
    • insert(const T& value):可以多次插入相同的值。
  • 查找元素:
    • count(const T& value):返回集合中等于 value 的元素的数量(可以大于 1)。
  • 删除元素:
    • erase(const T& value):删除集合中所有等于 value 的元素。

3. unordered_set

unordered_set 是一种无序集合,内部使用哈希表实现。它存储的元素没有顺序,也不允许重复元素。由于是哈希表实现,unordered_set 在平均情况下的插入、删除、查找操作时间复杂度为 O(1)。

常用操作:
  • 插入元素:
    • insert(const T& value):将 value 插入到集合中,顺序不保证。
  • 删除元素:
    • erase(const T& value):删除集合中等于 value 的元素。
  • 查找元素:
    • find(const T& value):返回指向 value 的迭代器,如果未找到则返回 end()
    • count(const T& value):返回集合中等于 value 的元素的数量(只能是 0 或 1)。
  • 访问:
    • begin()end():迭代器遍历顺序不保证。
  • 容量相关:
    • size():返回集合中元素的数量。
    • empty():判断集合是否为空。
  • 其他操作:
    • clear():清空集合。
    • swap(unordered_set& other):与另一个集合交换内容。
    • 哈希相关:
      • bucket_count():返回当前哈希桶的数量。
      • load_factor():返回当前的负载因子。

总结:

  • set:有序集合,不允许重复元素,基于红黑树。
  • multiset:有序集合,允许重复元素,基于红黑树。
  • unordered_set:无序集合,不允许重复元素,基于哈希表。

选择哪种集合取决于你是否需要元素的顺序和是否允许重复元素。如果不关心顺序且不允许重复,unordered_set 通常是最快的选择。如果需要保持元素的顺序,可以选择 setmultiset

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值