Возможный дубликат:
Как найти элемент в std :: vector?Есть ли что-то в
, что позволяет проверить, содержит ли std :: container что-то? Или способ сделать так, например:
if(a.x == b.x && a.y == b.y) return true; return false;
Это можно сделать только с помощью
std :: map
, поскольку он использует ключи?Спасибо
Проверка, содержит ли 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 */
}
См. вопрос: Как найти элемент в std::vector?
Вам также потребуется убедиться, что вы реализовали подходящий operator==()
для вашего объекта, если стандартного оператора недостаточно для "глубокой" проверки равенства.
Если поиск элемента важен, я бы рекомендовал std :: set
вместо std :: vector
. Используя это:
std :: find (vec.begin (), vec.end (), x)
выполняется за время O (n), но std :: set
имеет свой собственный find ()
член (например, myset.find (x)
), который выполняется за время O (log n) - это намного эффективнее с большим количеством элементов
std: : set
также гарантирует, что все добавленные элементы уникальны, что избавляет вас от необходимости делать что-либо вроде , если не содержится, то push_back () ...
.