如何使用find_if查找类的匹配对象? (或任何其他方式来实现结果)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用find_if查找类的匹配对象? (或任何其他方式来实现结果)相关的知识,希望对你有一定的参考价值。

我正试图遍历“刺激”类对象的向量。如果对象的属性符合条件,我希望返回Stimulus对象。

std::vector<Stimulus> BS_stimulus_list;

bool StimulusCollection::isNextPoint(Stimulus it){
if(it.GetPointDeg()=="(Some json value)" & it.GetEye()==currentEye){
    return true;
}
else{
    return false;
}

void StimulusCollection::NextBSStimulus(char e){
currentEye = e;
if (currentEye=='L'){
    vector<Stimulus>::iterator idx = find_if(BS_stimulus_list.begin(), BS_stimulus_list.end(),isNextPoint);
}

上面的代码给了我一个编译错误:必须使用'。'或' - >'调用指针成员函数.....我做错了什么?或者我应该采取哪些不同的方式来完全避免这种情况?

答案

你必须通过使用lambda(见下文)或std::bind来指定实例

void StimulusCollection::NextBSStimulus(char e) {
    currentEye = e;
    if (currentEye=='L'){
        vector<Stimulus>::iterator idx = find_if(
            BS_stimulus_list.begin(), 
            BS_stimulus_list.end(),
            [this](const auto& stimulus) { return isNextPoint(stimulus); });
    }
}

(对于C ++ 14,将旧版本的const auto&更改为const Stimulus&

另一答案

假设isNextPoint被标记为static,您需要明确限定它:

find_if(BS_stimulus_list.begin(), 
        BS_stimulus_list.end(), 
        StimulusCollection::isNextPoint)

如果它不是static,你可以使用lambda表达式来将isNextPoint的调用绑定到StimulusCollection的特定实例。

以上是关于如何使用find_if查找类的匹配对象? (或任何其他方式来实现结果)的主要内容,如果未能解决你的问题,请参考以下文章

c++如何让find_if函数能查找多个符合条件的值?

从字符串成员的条件匹配的集合中查找对象的最快方法

地图上的 find_if 问题

正则表达式 RegExp 对象

如何查找对类的所有对象的所有调用

如何使用任何东西在数组或字典中查找对象