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

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

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

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

return false;

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

Спасибо

244
задан Community 23 May 2017 в 01:47
поделиться

3 ответа

Проверка, содержит ли 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 */
}
483
ответ дан 23 November 2019 в 03:07
поделиться

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

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

12
ответ дан 23 November 2019 в 03:07
поделиться

Если поиск элемента важен, я бы рекомендовал 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 () ... .

94
ответ дан 23 November 2019 в 03:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: