如何在C++中迭代一个无序的集合
How does one iterate through an unordered set in C++?
假设我有一个无序集
unordered_set<int> my_set;
myset.insert(1);
myset.insert(2);
myset.insert(3);
我该如何迭代?我不需要按任何顺序迭代——只要我到达每个元素一次即可。我试过
for (int i = 0; i < my_set.size(); i++)
cout << my_set[i];
但无济于事。
您可以使用基于循环的新范围:
std::unordered_set<T> mySet;
for (const auto& elem: mySet) {
/* ... process elem ... */
}
或者,您可以使用更传统的基于迭代器的循环:
std::unordered_set<T> mySet;
for (auto itr = mySet.begin(); itr != mySet.end(); ++itr) {
/* ... process *itr ... */
}
或者,如果您没有auto
支持,可能是因为您的编译器上没有C++11支持:
std::unordered_set<T> mySet;
for (std::unordered_set<T>::iterator itr = mySet.begin(); itr != mySet.end(); ++itr) {
/* ... process *itr ... */
}
就像任何其他集合一样:
for (auto i = my_set.begin(); i != my_set.end(); ++i) {
std::cout << (*i) << std::endl;
}
或者使用begin
和end
函数的重载的一种更通用的方式(您可以为自己的类型编写重载;它们也适用于普通数组):
for (auto i = begin(my_set); i != end(my_set); ++i) {
...
}
到目前为止从未使用过它们,但我想您可以像使用std::set
:一样使用迭代器
for(unordered_set<int>::iterator a = my_set.begin(); a != my_set.end(); ++a) {
int some_int = *a;
}
相关文章:
- 如何将一个单词拆分成字母,并将它们放入一个无序的列表/集合中
- 仅从无序集合中删除一个项目
- 将一个向量对放在一个无序映射与一个映射中
- 如何从一个无序集合中获取一个元素
- 以std::字符串作为关键字,按字典顺序对一个无序映射进行排序
- 使用shared_ptr<字符串>转换为一个无序集合<字符串>
- 如何使用一个整数数组作为一个无序映射的键
- C++将一个值存储在无序对中
- 对一个无序映射c++进行排序时数据丢失
- 如何在一个无序映射中存储2个以上的变量
- 声明一个无符号int和一个数组的无序映射(将具有不同的大小)
- 判断一个键是否在一个c++无序映射中最省时的方法是什么
- 插入到一个无序映射的无序映射中
- 将向量排序到一个无序映射c++11中
- 如何使用C++(g++编译器)初始化一个无序集
- 包含一个图形节点作为关键字的无序映射
- 如何在C++中迭代一个无序的集合
- 为什么我可以在一个文件中无序地初始化两个静态类变量,而不能初始化三个
- 填充一个无序的vector元素指针队列
- 使用自定义哈希函数插入到一个无序集合中