迭代器设置为插入功能

时间:2012-11-12 21:02:42

标签: c++ insert iterator

我正在为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;
}

1 个答案:

答案 0 :(得分:2)

你的迭代器不能迭代,除非它可以从一个元素移动到下一个元素。使用当前代码递增iterator_node,您必须在整个Graph中搜索当前Node,然后找到下一个......这将非常慢。

您需要将每个Node与其邻居相关联,或者您的iterator_node应该存储map<NodeID,Node*>::iterator而不是Node*