2.6. Множества и множества с дубликатами

В этом и следующем разделе мы рассмотрим по одной простой программе для каждого из четырех ассоциативных контейнеров: эти разделы покры­вают все возможные операции с этими контейнерами не полностью, но они поясняют наиболее важные их характеристики.

Множества

Начнем с двух множеств целых чисел. Хотя элементы добавляются разны­ми способами, получающиеся множества идентичны.

//  set.cpp: Два идентичных множества, //                   созданных разными способами,

♦include <iostream> #include <set> using namespace  std;

int main()

{ set<int, less<int> > S, T;

S.insert(10); S.insert (20); S.insert(30);

S.insert(10);

T.insert(20); T.insert(30); T.insert(10);

if (S == T) cout « "Equal sets, containing:\n";

Множества и множества с дубликатами

61

for   (set<int,   less<int> >::iterator i = T.beginO; i   != T.endO ;   i++) cout « *i «  "   "; cout « endl; return 0; }

Программа выведет

Equal sets,  containing: 10  20  30

и это показывает, что порядок 20, 30, 10, в котором были добавлены эле­менты Т, несущественен; равным образом множество 5 не изменяет добав­ление элемента 10 во второй раз. Напомним, что ключи уникальны во мно­жествах, но могут повторяться во множествах с дубликатами.

Обратите внимание на запись, с помощью которой определены 5 и Г:

set<int,   less<int> > S,   T;

Предикат

less<int>

требуется для определения значения выражения kx < k2, где kx и k2 являют­ся ключами. Это выглядит странным в текущем примере, когда ключи -целые числа, но стоит напомнить, что множества могут содержать ключи, тип которых определен пользователем. Пробел между двумя закрывающи­ми угловыми скобками в

less<int> >

необходим, чтобы компилятор не обнаружил в этом фрагменте оператор ».

Хотя множества и не являются последовательностями, мы можем при­менять к ним итераторы и функции begin и end, как видно из этой програм­мы. Данные итераторы являются двунаправленными (см. раздел 1.9): для итератора i типа set<int, less<int> >::iterator выражения ++i, i++, —i и i— являются допустимыми, a i + N и i - N - нет.

Множества с дубликатами

Следующая программа демонстрирует, что во множествах с дубликатами могут встречаться одинаковые ключи. Для разнообразия в ней вывод осу­ществляется с помощью функции сору, как показано ранее в разделе 1.9:


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