我正在为Graph类
实现一个迭代器class iterator_node {
private:
Graph* gr_;
Node* curNode_;
public:
iterator_node() : gr_(NULL),curNode_(NULL) {}
iterator_node(Graph& ddg) : gr_(&ddg),curNode_(NULL) {}
~iterator_node() {}
}
我还有一个Graph
类,我应该为其实现insert
函数
class Graph {
private:
//....
map<NodeID,Node*> nodes_;
public:
pair<iterator_node,bool> insert(const NodeID nodeId,const NodeLabel nodeLabel);
}
pair<iterator_node,bool> Graph::insert(const NodeID nodeId,const NodeLabel nodeLabel)
{
DDG::iterator_node itNode(*this);
pair<Graph::iterator_node,bool> res(itNode,false);
Node* node = new Node(nodeId,false,nodeLabel);
pair<map<NodeID,Node*>::iterator,bool> nodeInsRet = nodes_.insert(pair<NodeID,Node*> (nodeId,node));
if (nodeInsRet.second == false) {
std::cout << "Node with nodeID=" << nodeId << " already exists \n";
delete node;
}
else {
res.second = true;
//!!Question!!!!
//should update curNode_; in res`s iterator (res.first)
//what is a relevan correct way to do it?
}
return res;
}
答案 0 :(得分:2)
你的迭代器不能迭代,除非它可以从一个元素移动到下一个元素。使用当前代码递增iterator_node
,您必须在整个Graph
中搜索当前Node
,然后找到下一个......这将非常慢。
您需要将每个Node
与其邻居相关联,或者您的iterator_node
应该存储map<NodeID,Node*>::iterator
而不是Node*