迭代std :: map <X,std :: vector <Y >>并对向量进行排序

Fra*_*ank 4 c++ iterator stl map

迭代时std::map<X,std::vector<Y> >,我可以对向量进行排序,还是可能使迭代器无效?

换句话说,以下代码是否可以?

typedef std::map<int, std::vector<int> > Map;
Map m;
for (Map::iterator it = m.begin(); it != m.end(); ++it) {
  std::sort(it->second.begin(), it->second.end());
}
Run Code Online (Sandbox Code Playgroud)

asc*_*ler 6

你的代码没问题.来自a的迭代器map仅在从地图中删除元素时失效.修改STL容器的元素永远不会使该容器的迭代器无效,只会对容器本身进行操作,例如删除或有时添加元素.

  • 这有点模糊甚至误导.Re"映射中的迭代器仅在删除元素时失效" - 只有删除的特定元素的迭代器才会失效.一般来说,重新使用STL容器,它们的迭代器只能通过"删除或有时添加元素"来使其无效 - 这些操作都不会使迭代器无效为std :: map,std :: multimap,std :: set等. (2认同)