C++中集合的使用

简介: C++中集合的使用

在 C++ 中,集合通常指的是标准模板库(STL)中的 std::set 或 std::unordered_set。这两个都是用来存储不重复元素的容器,但在实现和使用方式上有一些区别。


1. std::set

  • 基于红黑树实现,元素按照严格的顺序(默认是升序)排列。
  • 插入、查找、删除操作的平均时间复杂度为 O(log n)。
  • 不支持直接修改元素的值,但可以通过删除再插入的方式来实现。
  • 用法示例:
#include <iostream>
#include <set>
 
int main() {
    std::set<int> mySet;
 
    // 插入元素
    mySet.insert(3);
    mySet.insert(1);
    mySet.insert(4);
    mySet.insert(2);
 
    // 查找元素
    if (mySet.find(3) != mySet.end()) {
        std::cout << "3 存在于集合中" << std::endl;
    }
 
    // 删除元素
    mySet.erase(4);
 
    // 遍历集合
    for (int x : mySet) {
        std::cout << x << " ";
    }
    std::cout << std::endl;
 
    return 0;
}


2. std::unordered_set

  • 基于哈希表实现,元素无序存储。
  • 插入、查找、删除操作的平均时间复杂度为 O(1)。
  • 元素类型必须支持哈希函数,或者提供自定义的哈希函数。
  • 用法示例:
#include <iostream>
#include <unordered_set>
 
int main() {
    std::unordered_set<int> mySet;
 
    // 插入元素
    mySet.insert(3);
    mySet.insert(1);
    mySet.insert(4);
    mySet.insert(2);
 
    // 查找元素
    if (mySet.find(3) != mySet.end()) {
        std::cout << "3 存在于集合中" << std::endl;
    }
 
    // 删除元素
    mySet.erase(4);
 
    // 遍历集合
    for (int x : mySet) {
        std::cout << x << " ";
    }
    std::cout << std::endl;
 
    return 0;
}
  • 无论使用 std::set 还是 std::unordered_set,都需要包含 <set><unordered_set> 头文件,并且在编译时链接 STL 库。这些集合提供了强大的功能,可以方便地实现很多常见的数据结构和算法。


3.要判断一个元素是否在集合中

,你可以使用集合的 find() 函数。这个函数会返回一个迭代器,如果找到了元素,则返回指向该元素的迭代器;如果未找到,则返回集合的 end() 迭代器。下面是一个示例:

#include <iostream>
#include <set>
 
int main() {
    std::set<int> mySet = {1, 2, 3, 4, 5};
 
    int element = 3;
 
    // 使用find()函数判断元素是否在集合中
    auto it = mySet.find(element);
    if (it != mySet.end()) {
        std::cout << element << " 存在于集合中" << std::endl;
    } else {
        std::cout << element << " 不在集合中" << std::endl;
    }
 
    return 0;
}


ps:


对于 std::set 中的 end(),它返回的是指向集合中最后一个元素之后的位置。通常在使用 find() 函数查找元素时,如果找不到目标元素,find() 函数会返回 end() 指向的位置,表示找不到目标元素。因此,我们通常会将 find() 函数的返回值与 end() 迭代器进行比较,以判断是否找到了目标元素。


相关文章
|
算法 C++
92 C++ - 常用集合算法
92 C++ - 常用集合算法
67 0
|
2月前
|
搜索推荐 编译器 C语言
【C++核心】特殊的元素集合-数组与字符串详解
这篇文章详细讲解了C++中数组和字符串的基本概念、操作和应用,包括一维数组、二维数组的定义和使用,以及C风格字符串和C++字符串类的对比。
78 4
|
关系型数据库 MySQL 数据库
MySql 数据库 - 安装时提示缺失VCRUNTIME140_1.dll文件导致的无法启动此程序解决方法,vc++2015-2019运行库集合包获取
MySql 数据库 - 安装时提示缺失VCRUNTIME140_1.dll文件导致的无法启动此程序解决方法,vc++2015-2019运行库集合包获取
376 0
MySql 数据库 - 安装时提示缺失VCRUNTIME140_1.dll文件导致的无法启动此程序解决方法,vc++2015-2019运行库集合包获取
|
5月前
|
算法 搜索推荐 C++
C++之STL常用算法(遍历、查找、排序、拷贝、替换、算数生成、集合)
C++之STL常用算法(遍历、查找、排序、拷贝、替换、算数生成、集合)
|
6月前
|
算法 C++ 容器
黑马c++ STL常用算法 笔记(6) 常用集合算法
黑马c++ STL常用算法 笔记(6) 常用集合算法
|
存储 API C++
5.1 C++ STL 集合数据容器
Set/Multiset 集合使用的是红黑树的平衡二叉检索树的数据结构,来组织泛化的元素数据,通常来说红黑树根节点每次只能衍生出两个子节点,左面的节点是小于根节点的数据集合,右面的节点是大于根节点的集合,通过这样的方式将数据组织成一颗看似像树一样的结构,而平衡一词的含义则是两边的子节点数量必须在小于等1的区间以内。
77 0
|
算法 容器
C++STL算法篇之集合算法
C++STL算法篇之集合算法
|
6月前
|
存储 人机交互 C++
C++实现简易的集合运算
C++实现简易的集合运算
|
6月前
|
存储 算法 C++
C++ STL精通之旅:向量、集合与映射等容器详解
C++ STL精通之旅:向量、集合与映射等容器详解
159 0
|
人工智能 算法 搜索推荐
9.1 C++ STL 排序、算数与集合
C++ STL(Standard Template Library)是C++标准库中的一个重要组成部分,提供了丰富的模板函数和容器,用于处理各种数据结构和算法。在STL中,排序、算数和集合算法是常用的功能,可以帮助我们对数据进行排序、统计、查找以及集合操作等。STL提供的这些算法,能够满足各种数据处理和分析的需求。通过灵活使用这些算法,我们可以高效地对数据进行排序、查找和聚合操作,提高代码的性能和可读性。在实际编程中,根据具体问题的需求选择合适的算法,能够更好地发挥STL的优势,提高程序的效率。
45 0