Клас та предмети
Клас - це набір змінних та функцій, які працюють разом, де змінні не мають присвоєних значень. Коли значення присвоюються змінним, клас стає об'єктом. Різні значення, присвоєні одному і тому ж класу, призводять до різних об’єктів; тобто різні об’єкти - це один і той самий клас з різними значеннями. Створення об'єкта з класу називається екземпляром об'єкта.
Ім'я, unordered_map, є класом. Об'єкт, створений із класу unordered_map, має обране програмістом ім'я.
Функція, яка належить класу, потрібна для створення об'єкта з класу. У C ++ ця функція має те саме ім'я, що і ім'я класу. Об'єкти, створені (інстанційовані) з класу, мають різні імена, надані їм програмістом.
Створення об'єкта з класу означає побудову об'єкта; це також означає створення екземпляра.
Програма C ++, яка використовує клас unordered_map, починається з наступних рядків у верхній частині файлу:
#включати#включати
використання простору імен std;
Перший рядок призначений для введення / виводу. Другий рядок - дозволити програмі використовувати всі функції класу unordered_map. Третій рядок дозволяє програмі використовувати імена у стандартному просторі імен.
Перевантаження функції
Коли два або більше різних підписів функцій мають одне і те ж ім'я, це ім'я вважається перевантаженим. Коли викликана одна функція, кількість і тип аргументів визначають, яка функція насправді виконується.
Конструювання / побудова копій
Просте будівництво
Невпорядковану карту можна сконструювати та присвоїти значення наступним чином:
unordered_mapumap ["банан"] = "жовтий";
umap ["виноград"] = "зелений";
umap ["fig"] = "фіолетовий";
Оголошення починається зі спеціалізації шаблону з типами для пар ключів і значень. Далі слідує обрана програмістом назва карти; потім крапка з комою. Другий сегмент коду показує, як призначати значення їх ключам.
Побудова за Initializer_list
Це можна зробити наступним чином:
"виноград", "зелений", "фіга", "фіолетовий");
Побудова шляхом присвоєння Initializer_list
Приклад:
"виноград", "зелений", "фіга", "фіолетовий";
Побудова шляхом копіювання іншої невпорядкованої_карти
Приклад:
"виноград", "зелений", "фіга", "фіолетовий");
unordered_map
Пара Стихія
Наступний код показує, як створити та отримати доступ до елемента пари:
паракут << pr.first << '\n';
кут << pr.second << '\n';
Результат:
dморе
перший і другий - зарезервовані слова для двох елементів у парі. Значення в парі все ще можна змінити за допомогою першого та другого.
У темі невпорядкованої карти називається пара, value_type.
unordered_map Доступ до елемента
mapped_type & operator [] (key_type && k)
Повертає значення для відповідного ключа. Приклад:
umap ["банан"] = "жовтий";
umap ["виноград"] = "зелений";
umap ["fig"] = "фіолетовий";
const char * ret = umap ["виноград"];
кут << ret <<'\n';
Результат: "зелений". Значення можна призначати однаково - див. Вище.
unordered_map Ємність
size_type size () const noexcept
Повертає кількість пар на карті.
umap ["банан"] = "жовтий";
umap ["виноград"] = "зелений";
umap ["fig"] = "фіолетовий";
кут << umap.size() <<'\n';
Вихід 3.
bool empty () const noexcept
Повертає 1 для true, якщо на карті немає пари, і 0 для false, якщо вона має пари. Приклад:
unordered_mapкут << umap.empty() <<'\n';
Вихід - 1.
Повертаються ітератори та Клас невпорядкованої карти
Ітератор схожий на вказівник, але має більше функціональних можливостей, ніж вказівник.
begin () noexcept
Повертає ітератор, який вказує на першу пару об'єкта карти, як у наступному сегменті коду:
unordered_mapumap ["банан"] = "жовтий"; umap ["виноград"] = "зелений"; umap ["fig"] = "фіолетовий";
unordered_map
пара
кут << pr.first << ", " << pr.second << '\n';
Вихід: інжир, фіолетовий. Карта не упорядкована.
begin () const noexcept;
Повертає ітератор, який вказує на перший елемент колекції об'єктів карти. Коли побудові об'єкта передує const, замість "begin ()" виконується вираз "begin () const". За цієї умови елементи в об’єкті не можуть бути змінені. Наприклад, він використовується в наступному коді.
const unordered_map"виноград", "зелений", "фіга", "фіолетовий");
unordered_map
пара
кут << pr.first << ", " << pr.second << '\n';
Вихід: інжир, фіолетовий. Карта не упорядкована. Зауважте, що const_iterator цього разу використовувався замість просто ітератора для отримання поверненого ітератора.
end () noexcept
Повертає ітератор, який вказує безпосередньо за останнім елементом об'єкта карти.
end () const noexcept
Повертає ітератор, який вказує безпосередньо за останнім елементом об'єкта карти. Коли побудові об'єкта карти передує const, замість "end ()" виконується вираз "end () const".
unordered_map Операції
пошук ітератора (const key_type & k)
Шукає пару даного ключа на карті. Якщо він знайдений, він повертає ітератор. Якщо його не знайти, він повертає ітератор, який вказує на кінець карти, який не є парою. Наступний код показує, як використовувати цю функцію-член:
unordered_mapumap ['a'] = 'b'; umap ['c'] = 'd'; umap ['e'] = 'f';
unordered_map
якщо (umap.знайти ('c') != umap.кінець ())
пара
кут << pr.first << ", " << pr.second << '\n';
Вихід: c, d
const_iterator find (const key_type & k) const;
Ця версія функції викликається, якщо створення невпорядкованої карти починається з const, роблячи всі елементи карти лише для читання.
unordered_map Модифікатори
пара
Невпорядкована карта означає, що пари розташовані не в будь-якому порядку. Отже, програма вставляє пару в будь-яке місце, яке вважає зручним. Функція повертається, пара
umap ["банан"] = "жовтий";
umap ["виноград"] = "зелений";
umap ["fig"] = "фіолетовий";
umap.вставка ("вишня", "червона", "полуниця", "червона");
кут << umap.size() << '\n';
Результат: 5. Можна вставити більше однієї пари.
видалення типу_розміру (const key_type & k)
Ця функція стирає пару з невпорядкованої_карти. Наступний сегмент коду ілюструє:
unordered_mapumap ["банан"] = "жовтий";
umap ["виноград"] = "зелений";
umap ["fig"] = "фіолетовий";
int num = umap.стирання («виноград»);
кут << umap.size() << '\n';
Вихід 2.
обмін порожнечами (невпорядкована_карта &)
Дві невпорядковані карти можна поміняти місцями, як показано в цьому сегменті коду:
"виноград", "зелений", "фіга", "фіолетовий", "полуниця", "червоний";
unordered_map
umap1.обмін (umap2);
unordered_map
пара
unordered_map
пара
кут << "First key and size of umap1: "<< pr1.first <<", "<< umap1.size() << '\n';
кут << "First key and size of umap2 "<< pr2.first <<", "<< umap2.size() << '\n';
unordered_map
"виноград", "зелений", "фіга", "фіолетовий", "полуниця", "червоний";
unordered_map
umap1.обмін (umap2);
unordered_map
пара
unordered_map
пара
кут << "First key and size of umap1: "<< pr1.first <<", "<< umap1.size() << '\n';
кут << "First key and size of umap2 "<< pr2.first <<", "<< umap2.size() << '\n';
Результат:
Перший ключ і розмір umap1: вапно, 2
Перший ключ і розмір полуниці umap2, 4
Карта не упорядкована. Зверніть увагу, що довжина карти при необхідності збільшується. Типи даних повинні бути однаковими.
Клас та його інстансовані об'єкти
Значення стосується типу даних, як екземплярний об’єкт - до класу. Невпорядкована конструкція карти також може приймати клас як тип даних. Наступна програма це ілюструє:
#включати#включати
використання простору імен std;
клас TheCla
публічний:
int num;
статичний символ ch;
void func (char cha, const char * str)
кут << "There are " << num << " books worth " << cha << str << " in the store." << '\n';
статична порожня забава (char ch)
якщо (ch == 'a')
кут << "Official static member function" << '\n';
;
int main ()
TheCla obj1; TheCla obj2; TheCla obj3; TheCla obj4; TheCla obj5;
unordered_map
umap = "банан", obj1, "виноград", obj2, "фіга", obj3, "полуниця", obj4, "лайм", obj5;
кут << umap.size() << '\n';
повернути 0;
Результат: 5.
Визначення класу має два загальнодоступних члена даних та дві загальнодоступні функції членів. У функції main () створюються екземпляри різних об'єктів для класу. Потім створюється невпорядкована карта, де кожна пара складається з назви фрукта та об’єкта з класу. Відображається розмір карти. Програма компілюється без попередження або повідомлення про помилку.
Застосування карти
Масив пов'язує індекс зі значенням. Пари ключ / значення існують у багатьох життєвих ситуаціях, які можна запрограмувати. Пара ключ / значення фрукт / колір - лише один із прикладів. Інший приклад - ім’я людей та їх вік. У цьому випадку пара буде типу, пари
Формування карти
Карта не є двовимірним масивом з двома стовпцями. Карта працює з хеш-функцією. Ключ кодується хеш-функцією у ціле число масиву. Саме цей масив містить значення. Отже, насправді є один масив зі значеннями, і ключі зіставляються з індексами масиву, і тому відповідність між ключами та значеннями здійснюється. Хешування - велика тема, і ця стаття не висвітлює.
Висновок
Карта, також відома як асоціативний масив - це список елементів, де кожен елемент є парою ключ / значення. Отже, кожен ключ відповідає значенню. У C ++ карта реалізована як структура даних із функціями-членами та операторами. Впорядкована карта - це та, де пари елементів упорядковані за допомогою ключів. Невпорядкована карта - це карта, на якій немає замовлення.
Технічно хеш складається з пари
Список ініціалізаторів для карти є літералом масиву з літералів. Кожен внутрішній літерал складається з двох об’єктів - пари ключ / значення.
Функції-члени та оператори для невпорядкованої_карти можна класифікувати за такими заголовками: невпорядкована_конструкція / побудова копії, невпорядкована_мапа ємності, невпорядкована_мапа ітератор, невпорядкована_мапа оператори та невпорядкована_мапа модифікатори.
Невпорядкована карта використовується, коли ключ потрібно зіставити зі значенням.
Кріс