|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Typedet Vtype second_type; // Тип значенияKtype firs t; // Содержит ключ Vtype second; // Содержит значение // Конструкторы pair(); pair (const Ktype &K, const Vtype &V); template<class A, class B> pair(const<A, B> &ob); }
Как подсказывают комментарии, значение, хранящееся в поле first, содержит ключ, а поле second хранит значение, соответствующее этому ключу. Пару можно создать, вызвав либо конструкторы класса pair, либо функцию make_pair(), создающую объекты класса pair на основе информация о типе параметров. Функция make_pair() является обобщенной. Ее прототип приведен ниже.
template <class Ktype, class Vtype> pai.r<Ktype, Vtype> make_pair (const Ktype &k, const Vtype &v);
Как видим, эта функция возвращает объект класса pair, состоящий из пары значений типов Ktype и Vtype. Преимущество функции make_pair() заключается в том, что типы хранящихся объектов определяются компилятором автоматически, и задавать его явно не требуется. Следующая программа иллюстрирует основные операции над ассоциативным массивам, в котором хранятся пары значений, определяющие взаимное соответствие между прописными буквами и их ASCII-кодами. Таким образом, ключом является символ, а значением — целое число. Пары ключ-значение имеют следующий вид: А 65 В 66 С 67 Когда пользователь вводит ключ (т.е. букву от А до Z), на экран выводится его ASCII-код.
// Демонстрация простого ассоциативного массива. #include <iostream> #include <map> using namespace std; int main() { system("chcp 1251"); map<char, int> m; int i; // Записываем пары в ассоциативный массив. for(i=0; i<26; i++) { m.insert(pair<char, int>('A'+i, 65+i)); } char ch; cout << "Введите ключ: "; cin >> ch; map<char, int>::iterator p; // Найти значение по заданному ключу, p = m.find(ch); if (p!= m.end()) cout << "ASCII-код ключа равен " <<p->second; Else cout <<"Ключ не найден.\n"; system("pause"); return 0; }
Обратите внимание на то, что для создания пары ключ-значение применяется шаблонный класс pair. Тип данных, определенный этим классом, должен соответствовать типу ассоциативного массива, в который вставляются пары ключ-значение. После инициализации ассоциативного массива любое значение можно найти по его ключу. Для этого следует вызвать функцию find(), которая возвращает итератор, установленный на требуемый элемент или на конец массива, если нужного элемента в массиве не оказалось. Значение, связанное с найденным ключом, содержится в поле second класса pair. Впредыдущем примере пара ключ-значение создавалась явным образом с помощью конструктора класса pair<char, int>. Наряду с этим можно применять функцию make_pair(), создающую пары ключ-значение на основе информации о типе параметров. Например, в предыдущей программе оператор
m.insert(make_pair((char)('A'+i), 65+i)); также вставлял бы пары ключ-значение в объект m. Для того чтобы предотвратить автоматическое преобразование результата сложения i+'A' в тип int, необходимо выполнить приведение к типу char В противном случае тип определялся бы автоматически.
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.005 сек.) |