在两个条件下迭代自定义对象的向量

use*_*001 0 c++ stl vector c++11

使用C++ 11,我想迭代一个向量并返回一个指示未找到索引的类型.

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

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;
}
Run Code Online (Sandbox Code Playgroud)

我还必须递增索引+1以便返回值0(以容纳无符号size_t)以指示未找到索引的调用方法(我理解这是asinine).我假设它更适合返回更像的东西std::end()

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

Hol*_*olt 5

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

auto it = std::find_if(ItemVector.begin(), ItemVector.end(), 
    [&Item](Items *value) {
        return value->GetId() == Item.GetId() && !value->GetName().compare(Item.GetName());
    }
);
Run Code Online (Sandbox Code Playgroud)

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

在速度方面,这个和你的版本之间可能没有(或非常小的)差异,但它是一种更清晰的方法来检查是否找到了某些东西.