从迭代器获取对象

时间:2016-10-27 06:58:31

标签: c++ function set

我想从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);
        }
    }
}

3 个答案:

答案 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;

请注意Iterator invalidation rules

答案 2 :(得分:0)

您不应该返回参考,如果您找不到您的对象,这是一个不好的选择 保留原始代码,这是一个可能的解决方案:

{{1}}

@Human的回答似乎也很好。