7:
|
cout
|
«
|
"Number of
|
elements,
|
size() = " « Input.size() «
|
endl;
|
8:
|
cout
|
«
|
"Max bucket
|
count =
|
" « Input.max_bucket_count()
|
|
endl;
cout « "Load factor: " « Input.load_factor() « endl;
cout « "Max load factor = " « Input.max_load_factor() « endl;
cout « "Unordered set contains: " « endl;
1 2 :
Преимущества и недостатки использования наборов и мультимножеств
|
457
|
for(auto iElement = Input.cbegin() // auto, cbegin: C++11
; iElement != Input.cend() // cend: C++11
; ++ iElement )
cout« *iElement « '
17:
cout« endl;
}
2 0 :
int main()
22: {
// создание экземпляра контейнера unordered_set:
unordered_set usetlnt;
25:
usetlnt.insert (1000);
usetlnt.insert(-3);
usetlnt.insert(2011);
usetlnt.insert(300);
usetlnt.insert(-1000);
usetlnt.insert(989);
usetlnt.insert(-300);
usetlnt.insert (111);
DisplayContents(usetlnt);
usetlnt.insert(999);
DisplayContents(usetlnt);
// find() :
cout « "Enter int you want to check for existence in set:
int Key = 0;
cin » Key;
auto iPairThousand = usetlnt.find(Key);
43:
if (iPairThousand != usetlnt.end())
cout « *iPairThousand « " found in set" « endl;
else
cout « Key « " not available in set" « endl;
return 0;
}
Результат
Number of elements, size() = 8
Max bucket count = 8
Load factor: 1
Max load factor = 1
Unordered set contains:
1000 -3 2011 300 -1000 -300 989 111
Number of elements, size() = 9
Max bucket count = 64
Load factor: 0.140625
Max load factor = 1
Unordered set contains:
1000 -3 2011 300 -1000 -300 989 999 111
Enter int you want to check for existence in set: -1000 -1000 found in set
458 ЗАНЯТИЕ 19. Классы наборов библиотеки STL
Анализ
Здесь создается контейнер u n o rd e red _ set для целых чисел; в него вставляется восемь значений, а затем содержимое отображается на экране, включая поставляемую методами m ax_ bucket_ count (), lo a d _ f a c to r () и m a x _ lo a d _ fa c to r () статистику, как показано
строках 8-10. Вывод свидетельствует о том, что счет ячеек начинается с восьми, с вось мью элементами в контейнере и коэффициентом загрузки 1, который является максималь ным. Когда в контейнер u n o rd e re d _ s e t вставляется девятый элемент, он реорганизует себя, создаст 64 ячейки и воссоздаст хеш-таблицу, а коэффициент загрузки уменьшится. О стальная часть кода в m ain () демонстрирует, что синтаксис поиска элементов в кон тейнере u n o rd e re d _ se t подобен таковому в контейнере se t. Метод f in d () возвращает итератор, успех выполнения которого должен быть проверен, как показано в строке 42, прежде чем он будет использован.
Поскольку хеши обычно используются в хеш-таблице для поиска значения, за данного по ключу, обратитесь за подробной информацией к разделу о контей нере std::unordered_map занятия 20, “Классы карт библиотеки STL".
Контейнер std: :unordered_map является реализацией хеш-таблицы, поя- ;
вившейся в С++11. !
РЕКОМЕНДУЕТСЯ
Помните, что контейнеры set и multiset би блиотеки STL оптимизированы для ситуаций с частым поиском
Помните, что контейнер std: :multiset допускает несколько одинаковых элементов (ключей), а контейнер std::set разрешает хранить только уникальные значения
Используйте метод multiset::count {зна чение) для поиска количества элементов с определенным значением
Помните, что методы set:: size {) и multiset::size О возвращают количество элементов в контейнере
НЕ РЕКОМЕНДУЕТСЯ
Не забывайте определять операторы opera tor и operator^ для классов, объекты которых могут храниться в таких контейнерах, как set и multiset. Первый становится пре дикатом сортировки, а последний используется для таких функций, как set:: find ()
Не используйте контейнеры std:: set и
std: multiset в случаях с частыми встав ками и нечастыми поисками. Для этого обыч но лучше подходят такие контейнеры, как std::vector и std::list
Резюме
На сегодняшнем занятии рассматривались контейнеры s e t и m u lt is e t библиотеки STL, их основные функции-члены и характеристики. Вы такж е видели их применение для разработки простого меню телефонного справочника, реализующего также функции поиска и удаления.
Вопросы и ответы
Как мне объявить набор целых чисел, отсортированных и хранящихся в порядке убывания величин?
аблон класса s e t < i n t > определяет набор целых чисел. Он использует заданный по умолчанию предикат сортировки s t d : :le s s < T > , обеспечивающ ий сортировку эле
ментов в порядке возрастания величин, и может быть также выражен как s e t c i n t , l e s s < i n t > > . Для сортировки в порядке убы вания величин определите набор как s e t < i n t , g r e a t e r c i n t » .
■ Что будет, если вставить строку "Jack" в набор строк дваады?
Н абор не предназначен для хранения совпадаю щ их значений. Реализация класса s t d : : s e t не позволила бы вставить второе значение.
Do'stlaringiz bilan baham: |