在C++编程中,集合数据结构是一种非常重要的工具,用于存储不重复的元素,并支持高效的查找、插入和删除操作。C++标准模板库(STL)为我们提供了两种主要的集合容器:std::set 和 std::unordered_set。本文将带你从零开始,详细讲解这两种C++ STL容器的原理、用法及适用场景,即使是编程小白也能轻松上手!

集合是一种数学概念,表示一组互不相同的元素。在C++中,std::set 就是基于这一思想实现的容器:
set 中的元素默认按升序排列(基于红黑树实现)。下面是一个简单的 std::set 使用示例:
#include <iostream>#include <set>int main() { std::set<int> mySet; // 插入元素 mySet.insert(10); mySet.insert(30); mySet.insert(20); mySet.insert(10); // 重复,不会插入 // 遍历输出(自动排序) for (const auto& elem : mySet) { std::cout << elem << " "; } // 输出:10 20 30 // 查找元素 if (mySet.find(20) != mySet.end()) { std::cout << "\n找到了 20!"; } return 0;}如上所示,即使我们以乱序插入,set 也会自动按升序排列。这就是 C++ set用法 的核心优势之一。
如果你不需要元素有序,但希望获得更快的平均操作速度,可以使用 std::unordered_set。它基于哈希表实现:
这是 C++ unordered_set教程 的重点内容。
#include <iostream>#include <unordered_set>int main() { std::unordered_set<std::string> words; words.insert("apple"); words.insert("banana"); words.insert("cherry"); words.insert("apple"); // 重复,忽略 // 遍历(顺序不确定) for (const auto& w : words) { std::cout << w << " "; } std::cout << std::endl; // 检查是否存在 if (words.count("banana")) { std::cout << "banana 在集合中!\n"; } return 0;}| 特性 | std::set | std::unordered_set |
|---|---|---|
| 底层实现 | 红黑树 | 哈希表 |
| 是否有序 | 是 | 否 |
| 查找/插入/删除复杂度 | O(log n) | 平均 O(1) |
| 内存开销 | 较低 | 较高(哈希桶) |
- 如果你需要有序遍历或频繁进行范围查询(如“找出所有小于50的元素”),请选择 set。
- 如果你只关心元素是否存在,且追求极致性能,请选择 unordered_set。
通过本教程,我们系统学习了 C++集合数据结构 的两种核心实现:std::set 和 std::unordered_set。它们都是 C++ STL容器 家族的重要成员,适用于不同场景。掌握 C++ set用法 和 C++ unordered_set教程 中的核心知识点,将极大提升你在实际项目中的编码效率。
建议初学者多动手写代码,尝试在不同场景下使用这两种容器,体会它们的差异与优势。祝你编程愉快!
本文由主机测评网于2025-12-22发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/20251211514.html