Проверьте, содержит ли std::vector определенный объект?

Возможный дубликат:
Как найти элемент в std::vector?

Есть ли что-то в <algorithm>, которое позволяет вам проверить, содержит ли какой-нибудь std:: container? Или способ сделать это, например:

if(a.x == b.x && a.y == b.y)
return true;

return false;

Можно ли это сделать только с помощью std::map, поскольку он использует ключи?

Спасибо

Ответ 1

Проверка наличия v элемента x:

#include <algorithm>

if(std::find(v.begin(), v.end(), x) != v.end()) {
    /* v contains x */
} else {
    /* v does not contain x */
}

Проверка наличия v элементов (непустое):

if(!v.empty()){
    /* v is non-empty */
} else {
    /* v is empty */
}

Ответ 2

Если поиск элемента важен, я бы рекомендовал std::set вместо std::vector. Используя это:

std::find(vec.begin(), vec.end(), x) работает в O (n) времени, но std::set имеет свой собственный член find() (т.е. myset.find(x)), который работает в O (log n) времени - это намного эффективнее при большом количестве элементы

std::set также гарантирует, что все добавленные элементы уникальны, что избавляет вас от необходимости делать что-либо вроде if not contained then push_back()....

Ответ 3

Смотрите вопрос: Как найти элемент в std::vector?

Вам также необходимо убедиться, что вы применили подходящий operator==() для своего объекта, если по умолчанию его недостаточно для "глубокого" теста на равенство.