dan*_*007 32 c++ iteration unordered-set c++11
假设我有一个无序集
unordered_set<int> my_set;
myset.insert(1);
myset.insert(2);
myset.insert(3);
Run Code Online (Sandbox Code Playgroud)
我如何迭代它?我不需要以任何顺序迭代 - 只要我到达每个元素一次.我试过了
for (int i = 0; i < my_set.size(); i++)
cout << my_set[i];
Run Code Online (Sandbox Code Playgroud)
无济于事.
tem*_*def 59
您可以使用新的基于范围的for循环:
std::unordered_set<T> mySet;
for (const auto& elem: mySet) {
/* ... process elem ... */
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用更传统的基于迭代器的循环:
std::unordered_set<T> mySet;
for (auto itr = mySet.begin(); itr != mySet.end(); ++itr) {
/* ... process *itr ... */
}
Run Code Online (Sandbox Code Playgroud)
或者,如果您没有auto支持,可能是因为您的编译器没有C++ 11支持:
std::unordered_set<T> mySet;
for (std::unordered_set<T>::iterator itr = mySet.begin(); itr != mySet.end(); ++itr) {
/* ... process *itr ... */
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!
就像任何其他集合一样:
for (auto i = my_set.begin(); i != my_set.end(); ++i) {
std::cout << (*i) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
或者使用重载begin和end函数的一些更通用的方法(你可以为你自己的类型编写重载;它们也适用于普通数组):
for (auto i = begin(my_set); i != end(my_set); ++i) {
...
}
Run Code Online (Sandbox Code Playgroud)