set unordered_set
时间: 2023-11-09 16:06:16 浏览: 82
set和unordered_set是C++标准库中提供的两种容器,用于存储一组不重复的元素。其中,set是有序的,而unordered_set是无序的。
使用set的情况包括:
1. 需要有序的数据,需要按排序顺序来打印或访问数据。
2. 需要访问元素的前任或后继。
3. 需要使用二分查找、lower_bound()和upper_bound()等函数。
使用unordered_set的情况包括:
1. 需要保留一组不同的元素,但不需要排序。
2. 需要进行单元素访问,即无需遍历。
尽管unordered_set具有常数时间复杂度O(1),但在某些情况下,使用set可能更合适:
1. 需要进行有序遍历,以按排序顺序获取所有键。
2. 需要查找最接近更低和更高元素的键,或者进行范围查询。
3. 需要实现自定义的二叉搜索树(BST)。
相关问题
c++ set unordered_set
C++中除了set之外,还有另一个容器叫做unordered_set。unordered_set也是一种存储一组唯一元素的容器,但它不会对元素进行排序。相比于set,unordered_set的插入、删除和查找操作的平均时间复杂度是常数时间O(1),而不是对数时间O(log n)。unordered_set是基于哈希表实现的。
你可以使用#include <unordered_set>头文件来包含unordered_set的定义。然后可以使用unordered_set<T>来声明一个特定类型T的unordered_set对象,其中T是你想要存储的元素类型。
以下是一些常用的unordered_set操作:
1. 插入元素:使用insert()函数向unordered_set中插入元素。如果插入成功,则返回一个pair对象,其中pair.first是一个迭代器指向插入的元素位置,pair.second为true;如果元素已经存在,则不会进行插入,pair.second为false。
2. 删除元素:使用erase()函数从unordered_set中删除指定元素。你可以传递一个元素值或迭代器作为参数。
3. 查找元素:使用find()函数来查找一个元素,返回一个迭代器指向该元素。如果元素不存在,则返回unordered_set的end()迭代器。
4. 遍历元素:你可以使用迭代器循环遍历unordered_set中的所有元素。
5. 获取大小:使用size()函数获取unordered_set中元素的数量。
下面是一个简单的例子,演示了如何使用unordered_set:
```cpp
#include <iostream>
#include <unordered_set>
int main() {
std::unordered_set<int> mySet;
mySet.insert(10);
mySet.insert(20);
mySet.insert(30);
mySet.insert(20); // 重复插入,不会生效
// 遍历元素
for (const auto& element : mySet) {
std::cout << element << " ";
unordered_multiset,unordered_set,unordered_multimap,unordered_map,set,map,multiset,multimap的区别和特点 unordered_multiset,unordered_set,unordered_multimap,unordered_map,set,map,multiset,multimap的区别和特点
这些容器都是C++ STL(标准模板库)中的关联容器,用于存储和管理键值对数据。它们的区别和特点如下:
1. unordered_multiset和unordered_set:
- 无序容器,使用哈希表实现。
- unordered_multiset允许重复的元素,而unordered_set不允许。
- 插入、查找和删除的平均时间复杂度为常数时间(O(1))。
- 元素的顺序是无序的,不会根据插入顺序或键值排序。
2. unordered_multimap和unordered_map:
- 无序容器,使用哈希表实现。
- unordered_multimap允许键重复,而unordered_map不允许。
- 插入、查找和删除的平均时间复杂度为常数时间(O(1))。
- 元素的顺序是无序的,不会根据插入顺序或键值排序。
3. set和map:
- 有序容器,使用红黑树实现。
- set中存储唯一的键,map中存储键值对。
- 插入、查找和删除的平均时间复杂度为对数时间(O(log n))。
- 元素的顺序是按照键值排序的。
4. multiset和multimap:
- 有序容器,使用红黑树实现。
- 允许重复的键。
- 插入、查找和删除的平均时间复杂度为对数时间(O(log n))。
- 元素的顺序是按照键值排序的。
总结:unordered容器提供了更快的插入、查找和删除操作,但不保证元素顺序;而有序容器保证元素按照键值有序存储,但操作速度相对较慢。选择使用哪个容器取决于具体的需求。
阅读全文