【发布时间】:2012-04-22 12:55:51
【问题描述】:
我有这个迭代器循环,
typedef boost::unordered_map<std::pair<int, int>, NavigationNode> NodesMap;
NodesMap nodes;
for (NodesMap::iterator it= nodes.begin(); it != nodes.end() ; ++it)
{
if(it->second.type == NavigationNodeType_Walkable)
{
ConnectNode(&it->second);
}
}
ConnectNode 函数似乎使迭代器无效。它在 NavigationNode 中推送新元素并修改 NavigationNode 的现有成员。
我有两个问题
- 是否将它作为指针传递->秒?
- 迭代此容器的最佳方法是什么?
谢谢。
编辑:
会像这样访问容器的元素
nodes[intpair(x, y)]
里面的ConnectNode函数会导致这个问题吗?
edit2 是的。
这是为什么呢?我该如何解决?
【问题讨论】:
-
你有什么证据表明迭代器失效了?
-
无序映射的迭代器只有在容器本身被修改时才会失效,无论是通过擦除您拥有迭代器的元素,还是在发生重新散列时。
-
我怀疑它,当我注释掉 ConnectNode 函数时它工作正常。
-
太好了,那就把它注释掉吧:-)
-
如果这不是迭代器失效。你知道什么会导致这种情况吗?
标签: c++ iterator unordered-map