Void main(). priority_queue <int, vector<int>, CompareSum > P;
{
priority_queue <int, vector<int>, CompareSum > P;
int x;
P.push(13); P.push(51); P.push(200); P.push(17);
while (!P.empty())
{
x = P.top(); cout <<"Вибраний елемент:"<<x << endl;
P.pop();
}
}
Результат роботи програми:
Вибраний елемент: 200
Вибраний елемент: 13
Вибраний елемент: 51
Вибраний елемент: 17
10.3 Асоціативні контейнери
10.3.1 Загальні відомості про асоціативні контейнери
Як вже вказувалося, асоціативні контейнери забезпечують швидкий доступ до даних за рахунок того, що вони, як правило, побудовані на основі збалансованих дерев пошуку (стандартом регламентується тільки інтерфейс контейнерів, а не їх реалізація).
Існує п'ять типів асоціативних контейнерів: словники (mар), словники з дублікатами (multimap), множини (set), множини з дублікатами (multiset) і бітові множини (bitset). Словники часто називають також асоціативними масивами або відображеннями.
Словник побудований на основі пар значень, перше з яких є ключем для ідентифікації елементу, а друге – власне елемент. Можна сказати, що ключ асоційований з елементом, звідки і відбулася назва цих контейнерів. Наприклад, в англо-російському словнику ключем є англійське слово, а елементом – російське. Звичайний масив теж можна розглядати як словник, ключем в якому слугує номер елементу. У словниках, описаних в STL, в якості ключа може використовуватися значення довільного типу. Асоціативні контейнери описані в заголовних файлах <mар> і <set>. Для зберігання пари "ключ-елемент" використовується шаблон pair, описаний в заголовному файлі <utility>:
template <class Tl, class T2> struct pair
{
typedef Tl first_type;
typedef T2 second_type;
Tl first;
T2 second;
pair();
pair(const T1& x, const T2& y);
template <class U,class V> pair(const pair<U, V> &p)
};
Шаблон pair має два параметри, що є типами елементів пари. Перший елемент має ім'я first, другий, – second. Визначено два конструктори: один повинен набувати два значення для ініціалізації елементів, другий (конструктор копіювання), – посилання на іншу пару. Конструктора за умовчанням у пари немає, тобто при створенні об'єкту йому потрібно привласнити значення явним чином. Для пари визначені перевірка на рівність і операція порівняння на менше (решта всіх операцій відношення генерується в STL автоматично на основі цих двох операцій). Пара р1 менше пари р2, якщо р1.first < р2.first або
р1.first == р2.first && р1.second < р2.second.
Для надання значення парі можна використовувати функцію make_pair:
template <class T1, class T2>
pair<T1, T2> make_pair(const T1& x, const T2& y);
Приклад формування пар:
#include <iostream>
#include <utility>
using namespace std;
Дата добавления: 2014-12-26; просмотров: 780;