Nik*_*iko 17 c++ iterator unordered-map
请考虑以下情况:
using namespace std;
unordered_map<int, vector<A>> elements;
Run Code Online (Sandbox Code Playgroud)
现在我正在迭代这个无序的地图:
for (auto it = elements.begin(); it != elements.end(); ++it)
Run Code Online (Sandbox Code Playgroud)
在循环内部,我正在形成几个元素elements(当前的一个it指向和更多的元素,不一定是那些在线的那些!).因为每个元素只能是一个集群的一部分,所以我想从地图中删除它们,然后继续下一个元素(即构建下一个集群).
我怎么能这样做并仍然在正确的位置继续迭代?
小智 27
for (auto it = elements.begin(); it != elements.end();) {
if(you have to rease) {
it = elements.erase(it);
}
else
it++;
}
Run Code Online (Sandbox Code Playgroud)
这样你就可以确保在擦除后没有增加,而且你不会增加结束().
建议没有充分的理由让循环不增加任何东西你可能想要我们一个while循环而不是.主要是为了更具可读性.
Dre*_*ann 18
unordered_map::erase 将返回迭代器通过已删除的元素.
您可能需要以下代码:
it = myMap.erase( it );
Run Code Online (Sandbox Code Playgroud)
重要提示:如果您在循环中执行此操作,则需要确保在完成此操作时避免it循环结束时的典型增量.