Bootstrap

C++ STL(7)set


前言:

std::set是C++标准模板库(STL)中的一个关联容器,它存储唯一元素,并自动按升序排列。std::set通常用于需要快速查找、插入和删除元素的场景,同时保证元素的唯一性和有序性。

一、set

1、简介

std::set容器是一个包含唯一对象的集合,它自动维护元素的排序(默认递增)。具备下面的特点:

  • 元素无法直接修改,且不能重复。
  • 提供了高效的查找、插入和删除操作,时间复杂度通常为O(logn)
  • std::set容器底层通常使用红黑树实现。
  • std::set容器中,内存管理是由标准库自动处理的。插入元素时,容器会自动分配足够的内存来存储新插入的元素。删除元素时,容器会自动释放不再需要的内存。
  • 插入元素时,如果元素已存在,则插入操作不会执行,也不会分配新的内存。
  • std::set容器提供双向迭代器,不支持随机访问。迭代器在删除元素后可能会失效,因此在迭代过程中删除元素需要特别小心。

2、迭代器

#include <iostream>
#include <set>

int main() {
    // 创建一个空的整数集合
    std::set<int> my_set;

    // 向集合中插入元素
    my_set.insert(3);
    my_set.insert(1);
    my_set.insert(4);
    my_set.insert(2);

    // 遍历并打印集合中的元素
    for (const int& num : my_set) {
        std::cout << num << " ";
    }
    
    return 0;
}

3、常用操作

  • insert(const T& value): 插入一个元素(如果元素已存在,则不会插入)。
  • clear(): 移除 set 中的所有元素。
  • erase(iterator pos):移除位于 pos 位置的元素。
  • erase(const T& value):移除值为 value 的元素(如果存在)。
  • swap(std::set<T>& other):交换两个 set 的内容。
  • size():返回 set 中元素的数量。
  • empty():检查 set 是否为空。
  • find(const T& value):查找值为 value 的元素,并返回指向它的迭代器(如果未找到,则返回 end())。
  • count(const T& value):返回值为 value 的元素的数量(对于 set,返回值要么是 0,要么是 1)。
;