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:
<< назад вперед >>