c++ - 使用两个条件迭代自定义对象的 vector

标签 c++ c++11 vector stl

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

我习惯于传统的 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;
}

我还必须增加索引 +1 以返回值 0(以容纳无符号 size_t)以指示未找到索引的调用方法(我知道这是愚蠢的)。我假设返回更像 std::end()?

的东西会更合适

使用 C++11 迭代器方法会更高效吗? vector 将填充到一个很大的数字,并且需要快速查找。

最佳答案

你可以使用 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());
    }
);

然后您可以简单地测试是否 it != ItemVector.end() 以了解您是否找到了一些东西。

就速度而言,此版本与您的版本之间可能没有(或非常小)差异,但这是检查是否找到某些内容的更简洁的方法。

关于c++ - 使用两个条件迭代自定义对象的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41467029/

相关文章:

c++ - 为什么这会给我一个访问冲突? (C++)

c++ - std::string 作为成员函数参数的奇怪行为

c++ - 如何获取C++11参数包中的类型?

c++ - 将文件的全部内容读取到标准输出的最短方法是什么?

c++ - 我可以明确地专门化 std:shared_ptr::operator ->

math - 两个 3d 矢量之间的欧拉角

c++ - 在 C++ 中将 while 循环与 vector 一起使用时出现超出范围异常

c++ - 在 C++ Microsoft Visual Studio 2010 中调试多个环境变量

C++ 包括 C 文件(未找到 typedef)

c++ - 使用 MSVC 的可变参数函数模板特化中的错误?