// insrange.cpp: Добавление диапазона значений. #include <iostream> #include <set> using namespace std;
int main()
{ int a[3] = {20, 10, 20};
set<int, less<int> > S; S.insert(a, a+2); copy(S.begin(), S.endf), ostream_iterator<int>(cout, " ")); cout « endl; // Вывод 10 20
return 0; }
Для удаления элементов множества определены три функции:
void erase(iterator position); // 1
size_type erasefconst key_type& x); // 2
void erase(iterator first, iterator last); // 3
Если мы знаем позицию удаляемого элемента, рекомендуется использовать первую функцию. Если известно только значение этого элемента, мы используем вторую; эта функция возвращает количество удаленных элементов, как правило 1, но может равняться 0, если нужное значение отсутствует в множестве. Последняя из трех функций удаляет диапазон значений [first, last). Можно, следовательно, удалить все элементы множества S и сделать S пустым, написав
S.erase(S.begin(), S.endf));
Поскольку элементы множества уникальны (не может быть двух равных элементов), функция count, объявленная как
size_type count(const key_type& x) const;
возвратит либо 0, либо 1. Например, если множеством целых чисел является S, выражение S.count{ 123) принимает значение 1, когда 123 входит в множество S, и 0, когда не входит.
Следующие три функции осуществляют поиск заданного значения х в множестве:
iterator findfconst key_type& x) const; iterator lower_bound(const key_type& x) const; iterator upper_bound(const key_type& x) const;
Как обычно, после выполнения
i = S.find(x);
значение i равно S.endQ, если х не найдено, в противном случае *i равняется х. Чтобы найти минимальный диапазон [i,j) из множества S, содержащий х, мы можем написать
i = S.lower_bound(x); j = S.upper_bound(x);
Для примера предположим, что S состоит из целых чисел 30, 40 и 50. Таблица ниже содержит значения i и j для разных значений х. Строки, в которых х = 25, 35, 45 и 55, показывают, что вызовы функций S.lower_bound(x) и S.upper_bound(x) возвращают равные значения итераторов, если S не содержит х. Напротив, значения 30, 40 и 50 показывают, что возвращаемые итераторы различны, когда S содержит т.
<< назад вперед >>