使用 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/