Quantcast
Channel: 小蓝博客
Viewing all articles
Browse latest Browse all 3145

C++集合容器set与multiset的详细用法与区别

$
0
0

C++集合容器 setmultiset的详细用法与区别

在C++中,setmultiset都是STL(标准模板库)提供的关联容器,常用于存储和管理一组有序的数据。它们的核心区别在于元素的唯一性。虽然二者都遵循红黑树的结构,使得数据可以自动排序并且查找、插入、删除的时间复杂度为 O(log n),但它们在处理重复元素时有着不同的行为。

本文将详细介绍这两种容器的用法和它们的主要区别。

一、set容器

1. 概述

set是一个存储唯一元素的集合,其中的每个元素都是唯一的,且会自动按照指定的顺序(默认情况下是升序)排列。当插入元素时,set会自动去重,即如果插入的元素已存在于集合中,则不会再次插入。

2. 常用操作

  • 插入元素insert()函数用于插入元素。
  • 查找元素find()函数用于查找某个元素是否存在。
  • 删除元素erase()函数用于删除指定的元素。
  • 遍历元素:可以使用迭代器来遍历 set容器中的元素。

3. 代码示例

#include <iostream>
#include <set>

int main() {
    std::set<int> s;
  
    // 插入元素
    s.insert(5);
    s.insert(1);
    s.insert(3);
    s.insert(5);  // 重复的元素不会插入
  
    // 遍历集合
    for (int num : s) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    // 查找元素
    if (s.find(3) != s.end()) {
        std::cout << "3 found in the set!" << std::endl;
    }

    // 删除元素
    s.erase(1);
  
    // 遍历删除后的集合
    for (int num : s) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

4. 输出结果

1 3 5
3 found in the set!
3 5

5. 总结

  • set中的每个元素是唯一的,并且按照升序排列。
  • 在插入时,如果元素已存在,插入操作不会成功。
  • 适用于需要去重并且按顺序访问元素的场景。

二、multiset容器

1. 概述

multisetset类似,不同之处在于允许重复元素。也就是说,multiset可以包含多个相同的元素,这使得它适用于需要存储重复元素的场景。

2. 常用操作

  • 插入元素insert()函数用于插入元素,可以插入重复的元素。
  • 查找元素find()函数用于查找元素,但返回的是指向该元素的迭代器。
  • 删除元素erase()函数用于删除指定的元素,可以删除单个元素或所有匹配的元素。
  • 遍历元素:可以使用迭代器来遍历 multiset容器中的元素。

3. 代码示例

#include <iostream>
#include <set>

int main() {
    std::multiset<int> ms;
  
    // 插入元素,包括重复元素
    ms.insert(5);
    ms.insert(1);
    ms.insert(3);
    ms.insert(5);  // 重复元素也会被插入
  
    // 遍历集合
    for (int num : ms) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    // 查找元素
    if (ms.find(3) != ms.end()) {
        std::cout << "3 found in the multiset!" << std::endl;
    }

    // 删除元素
    ms.erase(5);  // 删除所有值为5的元素
  
    // 遍历删除后的集合
    for (int num : ms) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

4. 输出结果

1 3 5 5
3 found in the multiset!
1 3

5. 总结

  • multiset允许重复的元素存在。
  • 插入重复元素时,multiset会保留每个元素的出现次数。
  • 适用于需要存储重复元素并且按顺序访问的场景。

三、setmultiset的区别

特性setmultiset
元素唯一性不允许重复元素允许重复元素
插入操作插入相同的元素会被忽略允许插入多个相同的元素
排序方式元素自动排序(默认升序)元素自动排序(默认升序)
元素查找查找某个元素是否存在查找某个元素是否存在
删除操作删除单个元素可以删除所有相同元素或单个元素

1. 元素唯一性

  • set中的每个元素是唯一的,插入重复的元素会被自动忽略。
  • multiset允许重复元素,多个相同的元素可以同时存在。

2. 插入操作

  • set会自动去重,因此插入重复元素时不会进行插入。
  • multiset允许多个相同的元素存在,所以重复插入相同元素不会被拒绝。

3. 适用场景

  • set:适用于需要去重的场景,例如存储唯一的ID,集合运算等。
  • multiset:适用于需要统计元素出现次数的场景,例如频率统计、词频分析等。

四、实战应用场景

  1. 统计单词出现频率

    • 使用 multiset存储单词,可以轻松统计每个单词出现的次数,适用于文本分析、日志处理等场景。
    • 使用 set可以快速去重,避免重复存储相同元素。
  2. 集合运算

    • 如果需要快速判断两个集合是否有相同元素并去重,set是理想的选择。
    • multiset则可以在涉及频率统计时更加高效。

五、总结

  • setmultiset都是有序集合容器,提供了插入、查找、删除等基本操作。
  • 主要区别在于元素的唯一性set不允许重复元素,而 multiset允许重复元素。
  • 根据实际需求选择合适的容器:当需要去重时使用 set,当需要存储重复元素并且按顺序访问时使用 multiset

Viewing all articles
Browse latest Browse all 3145

Trending Articles