C++STL---set 和 multiset常见用法

在C++中,setmultiset 是基于红黑树实现的关联容器,它们自动保持元素的排序。这两种容器主要用于快速查找、插入和删除操作,其中元素自动排序且唯一(对于 set)或允许重复(对于 multiset)。下面详细介绍这两种容器的使用和相关算法。

set

set 是一个集合,其中所有元素都是唯一的,并且自动按照特定的顺序排序。

基本操作
  • 创建和初始化

    #include <set>
    std::set<int> s = {1, 2, 3, 4};
    
  • 插入元素

    s.insert(5);  // 插入元素5
    
  • 删除元素

    s.erase(3);  // 删除元素3
    
  • 查找元素

    auto it = s.find(4);  // 查找元素4
    if (it != s.end()) {
        // 找到元素
    }
    
  • 遍历

    for (int x : s) {
        std::cout << x << " ";
    }
    
特性
  • 元素唯一。
  • 元素按照指定的排序准则(默认为小于)排序。
  • 提供高效的查找、插入和删除操作。

multiset

multisetset 类似,但它允许存储重复的元素。

基本操作
  • 创建和初始化

    std::multiset<int> ms = {1, 2, 2, 3, 4};
    
  • 插入元素

    ms.insert(2);  // 插入元素2
    
  • 删除元素

    ms.erase(2);  // 删除所有的2
    ms.erase(ms.find(2));  // 删除一个2
    
  • 查找元素

    auto it = ms.find(2);  // 查找元素2
    if (it != ms.end()) {
        // 找到元素
    }
    
  • 计数元素

    int count = ms.count(2);  // 计算元素2的数量
    
  • 遍历

    for (int x : ms) {
        std::cout << x << " ";
    }
    
特性
  • 允许重复元素。
  • 元素按照指定的排序准则排序。
  • 提供高效的查找、插入和删除操作。

相关算法

由于 setmultiset 是基于红黑树实现的,它们的很多操作(如插入、删除、查找)都是对数时间复杂度。这使得它们非常适合需要频繁执行这些操作的场景。此外,可以使用标准算法(如 std::for_each, std::transform 等)来操作这些容器,但要注意这些操作不会改变容器中元素的排序。

使用场景

  • 当需要一个总是排序的集合时,setmultiset 是很好的选择。
  • set 适用于需要唯一元素的场景。
  • multiset 适用于可能需要重复元素的场景。

这些容器的自动排序和高效的查找特性使它们在实际应用中非常有用,如在数据库查询、统计数据中的元素计数、去重等场景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值