如何在STL容器中查找特定对象

Rn2*_*2dy 0 c++ containers std

我想在std :: list中找到一个特定的对象,其中对象的属性符合输入参数.

我找到了一个使用带有find(.)或find_if(.)的一元谓词的解决方案,但我需要一个二进制函数.

为什么我不能让迭代器成为对象的引用(比如java)并通过引用检查字段?有没有办法不使用find/find_if来做到这一点...

Kon*_*lph 8

我找到了一个使用带有find(.)或find_if(.)的一元谓词的解决方案,但我需要一个二进制函数.

不 - 你确实需要一元谓词 - 毕竟,该find_if函数只与一个对象(列表中的当前对象)进行比较.您的谓词需要知道要与哪个属性值进行比较:

struct compare_with {
    int attr_value;
    compare_with(int attr_value) : attr_value(attr_value) { }

    bool operator ()(your_object const& obj) const { return obj.attr == attr_value; }
};
Run Code Online (Sandbox Code Playgroud)

现在你可以调用find_if:

result = find_if(your_list.begin(), your_list.end(), compare_with(some_value));
Run Code Online (Sandbox Code Playgroud)

为什么我不能让迭代器成为对象的引用(比如java)并通过引用检查字段?

您可以.但是,你绝对不清楚这是什么意思.只需遍历列表即可.