//   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 содержит т.


<< назад вперед >>