C ++ STL Установить стирание по значению - PullRequest
3 голосов
/ 16 января 2020

Я хочу удалить элемент из std::set.

Я знаю, что лучший и простой способ - проверить его существование в наборе, используя метод set<T>::find(T val), а затем стереть его, используя возвращенный set<T>::iterator. Но я sh буду использовать сокращенный метод стирания по значению.

Хотя std::set обеспечивает это через перегруженную функцию set<T>::erase(T val), чтобы стирать по значению, как указано здесь Я не смог найти, что произойдет, если значение не существует в наборе.

Как можно было бы интуитивно ожидать, разве это ничего не делает , если значение аргумента не существует в наборе ? Гарантируется, что он не выдаст ошибку / исключение?

Ответы [ 2 ]

6 голосов
/ 16 января 2020

std::set соответствует требованиям ассоциативных контейнеров 26.2.6 associative.reqmts .

Возвращает количество фактически стертых элементов, которое для std::set должно быть равно нулю или единице, в зависимости от существования. В соответствии с 26.2.6.1 associative.reqmts.except гарантируется, что не будет выбрасывать, только если контейнерный компаратор (который может быть настроен, очевидно) не выбрасывает при использовании во время поиска.

3 голосов
/ 16 января 2020

С cplusplus

(1) void erase (позиция итератора);

(2) size_type erase (const value_type & val);

(3) void erase (первый итератор, последний итератор);

Возвращаемое значение

Для версии на основе значений (2) Функция возвращает количество стертых элементов.

Тип элемента size_type - это целочисленный тип без знака


Таким образом, он возвращает 0, если элементы не стерты.

...