Проверьте, содержит ли 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==()
для своего объекта, если по умолчанию его недостаточно для "глубокого" теста на равенство.