首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用两个条件迭代自定义对象的向量

用两个条件迭代自定义对象的向量
EN

Stack Overflow用户
提问于 2017-01-04 15:08:05
回答 2查看 195关注 0票数 0

使用C++11,我想对一个向量进行迭代,并返回一个类型,该类型表示没有找到索引。

我习惯了传统的for(;;)循环,并手动指定索引,如下所示。

代码语言:javascript
复制
inline std::size_t ItemList::FindItem(Items& Item)
{
    for (std::size_t i = 0; i < ItemVector.size(); i++)
    {
        if (ItemVector[i]->GetId() == Item.GetId() && !ItemVector[i]->GetName().compare(Item.GetName()))
        {
            return i + 1;
        }

    }
    return 0;
}

我还必须增加索引+1,以返回值0(以容纳未签名的size_t),以指示没有找到索引的调用方法(我知道这是asinine)。我认为返回更像std::end()的东西更合适

使用C++11迭代器方法会更有效吗?该向量将被填充到大量,并且查找需要快速。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-04 15:13:08

您可以使用std::find_if并使用迭代器:

代码语言:javascript
复制
auto it = std::find_if(ItemVector.begin(), ItemVector.end(), 
    [&Item](Items *value) {
        return value->GetId() == Item.GetId() && !value->GetName().compare(Item.GetName());
    }
);

然后,您可以简单地测试it != ItemVector.end()是否找到了什么。

这和你的版本在速度上可能没有(或很小)的差别,但它是一种更干净的方法来检查是否找到了什么东西。

票数 5
EN

Stack Overflow用户

发布于 2022-08-20 09:58:20

find_if中Lambda具有多个参数的双搜索条件的求解

代码语言:javascript
复制
bool check_second_loop(FullFrame *image_track, guint64 object_id, bool *deletion)
{
    auto itr= std::find_if(image_track->track_ids.begin(), 
                           image_track->track_ids.end(),
                           [object_id](const guint64& a)
    {
        return a == object_id;
    });

    if (itr != image_track->track_ids.end())
    {
        image_track->track_ids.erase(itr);
        if(image_track->track_ids.size()==0)
        {
            *deletion = true;
        }
        return true;
    }
    else
        return false;
}


bool check_first_loop(guint64 object_id, gint source_id)
{
    bool deletion = false;
    auto it = find_if(full_frame_list.begin(), full_frame_list.end(),
                      [object_id, &deletion, source_id](FullFrame &x)
    {
            return check_second_loop(&x, object_id, &deletion) 
                && x.camera_number == source_id;
});

    if (it != full_frame_list.end())
    {
        // Found
        return true;
    }
    else
        return false;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41467029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档