Иллюстрированный самоучитель по Visual Studio.Net



              

Контейнер типа set


Множество (set) является ассоциативным контейнером, который хранит объекты типа key. В этом случае говорят о типе Simple Associative Container, имея в виду, что как value, так и key имеют один тип key. Говорят также о Unique Associative Container, имея в виду, что в контейнере типа set не может быть одинаковых элементов. Рассмотрим работу контейнера на примерах. Не забудьте вставить директиву #include <set>:

void main ()

{

//======== Создаем множество целых

set<int> s;

s.insert(1);

s.insert(2);

s.insert (3);

//======= Повторно вставляем единицу (она не пройдет)

s.insert (1);

//==== Два раза вставляем "в конец последовательности"

s. insert (--s.end() , 4); s.insert(—s.endO, -1);

pr(s,"Set of ints");

//======== Второе множество

set<int> ss;

for (int i=l; i<5; i++) ss.insert (i*10);

//======== Вставляем диапазон

s. insert (++ss. begin () , —s s.end() );

pr(s, "After insertion"); cout«"\n\n";

}

Эта программа выведет в окно Output следующие строки:

Set of ints # Sequence:

1. -1

2. 1

3. 2

4. 3

5. 4

After insertion # Sequence:

1. -1

2. 1

3. 2

4. 3

5. 4

6. 20

7. 30

Как видно из распечатки, несмотря на то что и 4 и -1 были вставлены в конец последовательности, контейнер сам распорядился порядком следования и разместил элементы в порядке возрастания ключей. Вставка диапазона из другого множества также происходит по этим законам. Следующий содержательный пример я обнаружил на сайте компании Silicon Graphics. Он приведен в слегка измененном виде:

//========= Предикат

inline bool NoCase(char a, char b)

{

// Определяет отношение less для обычных символов

// без учета регистра (Подключите stdlib.h)

return tolower(a) < tolower (b) ; !;

}

//========= Функциональный объект

struct LessStr

{

//==== Определяет отношение less для C-style строк

bool operator()(const char* a, const char* b) const

{

return strcmp(a, b) < 0;

}

};

Два отношения порядка для типов данных, хорошо вам знакомых (char и char*), для разнообразия заданы: одно в виде предиката, другое в виде функционального объекта.


Содержание  Назад  Вперед