Для этого std::find_if
.
bool HasSlot20(const slotAndId& item)
{
return item.slot == 20;
}
int main()
{
std::vector<slotAndId> ids = {..};
std::vector<slotAndId>::const_iterator it = std::find_if(
ids.begin(),
ids.end(),
HasSlot20
);
}
Нам нужна дополнительная функция, потому что в C ++ 98 нет лямбд, но мы можем сделать ее более гибкой, используя вместо этого функтор:
struct HasSlot
{
HasSlot(const int id) : m_id(id) {}
bool operator()(const slotAndId& item)
{
return item.slot == m_id;
}
private:
const int m_id;
};
int main()
{
std::vector<slotAndId> ids = {..};
std::vector<slotAndId>::const_iterator it = std::find_if(
ids.begin(),
ids.end(),
HasSlot(20)
);
}
или
int main()
{
HasSlot finder(20);
std::vector<slotAndId> ids = {..};
std::vector<slotAndId>::const_iterator it = std::find_if(
ids.begin(),
ids.end(),
finder
);
}
Теперь эта логика может использоваться повторно с другими параметрами.
В качестве альтернативы просто есть цикл!
Если ваш контейнер очень большой, вы можете рассмотреть другую (или дополнительную) структуру данных, которая может сделать это лучше, чем линейное время.