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

时间:2011-02-03 21:26:05

标签: c++ containers std

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

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

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

2 个答案:

答案 0 :(得分: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; }
};

现在您可以调用find_if

result = find_if(your_list.begin(), your_list.end(), compare_with(some_value));
  

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

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

答案 1 :(得分:2)

是的,你可以这样做:

list<myclass>::iterator i;
for(i = mylist.begin(); i != mylist.end(); ++i)
{
    if(i->field == value_to_check_for)
        break;
}

// now i is an iterator pointing to the object if it was found
// or mylist.end() if it wasn't

但是,当然,如果您只是一次检查一个对象,我无法理解为什么您需要二元谓词。