假设我有一个无序集
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];
无济于事。
假设我有一个无序集
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];
无济于事。
您可以使用新的基于范围的 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 ... */
}
希望这可以帮助!
到目前为止从未使用过它们,但我猜你可以像使用迭代器一样使用迭代器std::set
:
for(unordered_set<int>::iterator a = my_set.begin(); a != my_set.end(); ++a) {
int some_int = *a;
}