c++ 遍历unordered_set
时间: 2024-09-06 12:07:37 浏览: 47
在C++中,遍历`unordered_set`(无序集合,类似于哈希表)通常使用迭代器(iterator)。`unordered_set`不支持像数组那样直接通过索引来访问元素,因为它是基于哈希表的数据结构,元素的位置不是固定的。以下是遍历`unordered_set`的基本步骤:
```cpp
#include <iostream>
#include <unordered_set>
int main() {
std::unordered_set<int> mySet = {1, 2, 3, 4, 5}; // 创建一个包含整数的无序集
// 使用begin()和end()函数获取迭代器范围
for (const auto& element : mySet) {
std::cout << "Element: " << element << "\n";
}
return 0;
}
```
在这个例子中,`for-each`循环会依次取出`mySet`中的每个元素。`element`是一个临时引用,每次迭代都会指向集合中的下一个元素。
相关问题
c++中unordered_set如何遍历
在C++中,遍历unordered_set容器有多种方法。下面是三种常见的方法:
方法一:使用迭代器进行遍历
可以使用迭代器来遍历unordered_set容器中的元素。例如,可以使用auto关键字来定义一个迭代器,并用begin()和end()函数获取unordered_set容器的起始和结束迭代器。然后,使用循环将迭代器逐个移动并输出元素。
示例代码如下:
```
std::unordered_set<std::string> uset{ "http://c.biancheng.net/c/", "http://c.biancheng.net/java/", "http://c.biancheng.net/linux/" };
for (auto iter = uset.begin(); iter != uset.end(); iter++) {
std::cout << *iter << std::endl;
}
```
方法二:使用范围for循环遍历
使用C++11引入的范围for循环语法,可以更简洁地遍历unordered_set容器中的元素。在每次循环中,元素被自动赋值给循环变量,并可以直接输出。
示例代码如下:
```
std::unordered_set<std::string> uset{ "http://c.biancheng.net/c/", "http://c.biancheng.net/java/", "http://c.biancheng.net/linux/" };
for (const auto& element : uset) {
std::cout << element << std::endl;
}
```
方法三:使用算法库函数进行遍历
可以使用算法库函数std::for_each来遍历unordered_set容器中的元素。该函数接受一个函数对象(或Lambda表达式)和容器的起始和结束迭代器,并将函数对象应用于每个元素。
示例代码如下:
```
#include <algorithm>
void printElement(const std::string& element) {
std::cout << element << std::endl;
}
std::unordered_set<std::string> uset{ "http://c.biancheng.net/c/", "http://c.biancheng.net/java/", "http://c.biancheng.net/linux/" };
std::for_each(uset.begin(), uset.end(), printElement);
```
这样就可以使用上述三种方法之一来遍历unordered_set容器中的元素。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [STL无序容器之unordered_set和unordered_multiset](https://blog.csdn.net/andyjkt/article/details/116495385)[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_2"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
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 << " ";
阅读全文