Контейнер типа 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; } };