在C++中如何遍历一个无序集?

2w3rbyxf  于 2022-12-24  发布在  其他
关注(0)|答案(3)|浏览(206)

假设我有一个无序集合

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];

都无济于事。

k7fdbhmy

k7fdbhmy1#

您可以使用新的基于范围的for循环:

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 ... */
}
brccelvz

brccelvz2#

就像其他系列一样:

for (auto i = my_set.begin(); i != my_set.end(); ++i) {
    std::cout << (*i) << std::endl;
}

或者使用beginend函数的重载的更通用的方法(您可以为自己的类型编写重载;它们也适用于普通数组):

for (auto i = begin(my_set); i != end(my_set); ++i) { 
    ...
}
zaq34kh6

zaq34kh63#

到目前为止还没有使用过,但是我猜你可以像使用std::set一样使用迭代器:

for(unordered_set<int>::iterator a = my_set.begin(); a != my_set.end(); ++a) {
    int some_int = *a;
}

相关问题