Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Упорядоченное множество элементов (set)




Хранит упорядоченно набор уникальных элементов. Обертка вокруг бинарного дерева поиска. Очевидно, что поменять элемент в такой коллекции скорее всего нельзя, впрочем, можно удалять и добавлять элементы. Имеется вариация множества без сортировки unsorted_set. Поскольку множества – понятие из математики, то в stl также добавили возможность находить объединение, пересечение и удаление множеств.

template < class T, // set::key_type/value_type

class Compare = less<T>, // set::key_compare/value_compare

class Alloc = allocator<T> // set::allocator_type

> class set;

Как видите, если не указан класс-сравниватель элементов, то элементы упорядочиваются по возрастанию.

Когда используется set?

Set используется, когда требуется хранить громадные коллекции объектов, в которых нужно часто проводить поиск, в которые часто вставляются и удаляются элементы. Если таких требований нет, то используются тип попроще – vector. Если сортировка требуется не всегда, то проще отсортировать вектор (std::sort(vector.begin(), vector.end())).

 

Пример

#include "stdafx.h"

#include <set>

#include <iostream>

#include <algorithm>

#include <iterator>

#include <string>

 

using namespace std;

 

template <typename TData>

void Print(const set<TData>& set, const char* delimiter)

{

cout << "Set content: ";

 

copy(

set.begin(),

set.end(),

ostream_iterator<TData>(std::cout, delimiter));

cout << endl;

}

 

void PrintSet(const set<int>& set)

{

// first way.

cout << "Set content: ";

 

for (auto setIterator = set.begin(); setIterator!= set.end(); ++setIterator)

cout << *setIterator << " ";

cout << endl;

 

// second way.

cout << "Set content: ";

 

copy(

set.begin(),

set.end(),

ostream_iterator<int>(std::cout, " "));

cout << endl;

}

 

int _tmain(int argc, _TCHAR* argv[])

{

// unique elements.

int elements[] = { 1, 1, 13 };

set<int> elementsSet(elements, elements + 3); // only unuqie elements were added.

PrintSet(elementsSet);

 

// search

set<string> namesSet = { "Test", "Abba" };

Print(namesSet, "\n");

if (namesSet.find("Test")!= namesSet.end())

cout << "Test is in set\n";

 

// add, remove elements

namesSet.erase("Test");

namesSet.insert("We need a hero");

Print(namesSet, ", ");

 

getchar();

 

return 0;

}

Multiset

То же самое, что и set, только элементы могут повторяться. Редко используется.





Поделиться с друзьями:


Дата добавления: 2015-05-05; Мы поможем в написании ваших работ!; просмотров: 558 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Сложнее всего начать действовать, все остальное зависит только от упорства. © Амелия Эрхарт
==> читать все изречения...

2221 - | 2091 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.011 с.