gpt4 book ai didi

c++ - 插入函数中的迭代器集

转载 作者:行者123 更新时间:2023-11-28 03:28:12 24 4
gpt4 key购买 nike

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

最佳答案

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

要么您需要链接每个 Node给它的邻居,或者你的iterator_node应该存储 map<NodeID,Node*>::iterator而不是 Node*

关于c++ - 插入函数中的迭代器集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13351515/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com