std::set的使用详解
时间: 2024-09-02 18:03:50 浏览: 52
`std::set` 是 C++ 标准模板库中的无序集合容器,主要用于存储唯一、有序的值。它的主要特性包括:
1. **唯一性**:不允许有重复的元素,所有元素都需满足互斥性,即不会有两个相同的值。
2. **自动排序**:默认使用标准库提供的比较函数对元素进行升序排序,元素的比较通常是基于它们的自然顺序,如果你需要自定义排序,可以提供一个比较器(`std::less<T>` 或者自定义对象)。
3. **内部结构**:`std::set` 实际上是通过红黑树(Red-Black Tree)数据结构来实现的,这使得插入、删除和查找操作的时间复杂度通常为 O(log n)。
4. **迭代器安全**:`std::set` 提供了迭代器,可以在遍历过程中确保元素不会被修改。
5. **范围操作**:你可以使用 `insert` 函数添加元素,`erase` 函数移除元素,`find` 搜索元素,还可以使用 `begin()` 和 `end()` 获取容器的起始和结束迭代器。
例如,创建一个 `std::set<QString>` 并添加元素:
```cpp
std::set<QString> fruits = {"Apple", "Banana", "Cherry"};
```
要查找元素:
```cpp
auto it = fruits.find("Banana");
if (it != fruits.end()) {
// 找到了 "Banana"
}
```
移除元素:
```cpp
fruits.erase(it);
```
相关问题
std::unordered_set 详解
std::unordered_set是C++ STL中的一个关联容器,它是一个无序的集合,其中的元素没有按照特定的顺序进行排列。std::unordered_set可以存储各种类型的元素,并且每个元素都是唯一的。它的内部实现是使用哈希表来存储元素,因此可以通过键值直接快速访问各个元素。
使用std::unordered_set时,需要提供一个哈希函数,用于计算元素的哈希值。默认情况下,std::unordered_set使用std::hash作为哈希函数,但也可以自定义哈希函数。同时,还需要提供一个相等比较函数,用于比较两个元素是否相等,默认情况下,std::unordered_set使用std::equal_to进行相等比较。
std::unordered_set提供了以下成员函数:
- insert:向集合中插入一个元素。
- erase:从集合中删除一个元素。
- size:返回集合中元素的个数。
- empty:判断集合是否为空。
- find:查找集合中是否存在某个元素。
- clear:清空集合中的所有元素。
使用std::unordered_set时,需要包含头文件<unordered_set>。
std::set 取值
std::set是C++中的一个容器,用于存储一组唯一的元素,并按照特定的顺序进行排序。要从std::set中取值,可以使用迭代器来遍历容器中的元素。引用中的示例代码展示了如何使用迭代器来遍历std::set容器中的元素。使用begin()函数可以获取指向第一个元素的迭代器,使用end()函数可以获取指向最后一个元素后面位置的迭代器。通过迭代器可以逐个访问std::set中的元素,可以使用*操作符来获取迭代器指向位置的值。例如,可以使用下面的代码来打印出一个std::set容器中的所有元素:
```
std::set<int> myset = { 50, 20, 60, 10, 25 };
for (auto it = myset.begin(); it != myset.end(); ++it)
{
std::cout << *it << ' ';
}
```
这段代码会输出:10 20 25 50 60
这样就可以获取std::set容器中的值。引用中的示例代码也展示了std::set的常用操作,包括插入元素、删除元素和判断元素是否存在等操作。需要注意的是,std::set中的元素是按照特定的顺序进行排序的,因此取出的值也是按照这个顺序来获取的。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [C++ std::set 取第一个元素](https://blog.csdn.net/u013288190/article/details/120705429)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *2* [STL之set容器](https://blog.csdn.net/weixin_49549507/article/details/108134078)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *3* [C++11 并发指南之std::thread 详解](https://download.csdn.net/download/weixin_38738830/12743526)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"]
[ .reference_list ]
阅读全文