我想从set<Node>
获取对象,但我认为我的函数给了我这个对象的副本。如何解决?
Node findByNum(int n){
for (set<Node>::iterator it = this->children.begin();it != this->children.end(); it++){
if ((*it).num == n){
return (*it);
}
}
}
答案 0 :(得分:5)
解决问题的最简单方法是让你的函数返回一个引用:
Node& findByNum(int n)
只要您使用对该节点的引用,就需要确保该节点保留在该集合中。
答案 1 :(得分:0)
返回iterator
而不是值或引用。您也可以使用std::find_if
:
set<Node>::iterator Node findByNum(const int n){
return std::find_if(children.begin(),children.end(),[n](const Node& item){
return item.num==n;
});
}
你可以这样使用它:
auto it_5=findByNum(5);
std::cout << it_5->n;
答案 2 :(得分:0)
您不应该返回参考,如果您找不到您的对象,这是一个不好的选择 保留原始代码,这是一个可能的解决方案:
{{1}}
@Human的回答似乎也很好。