Робота з таблицями STL

Наступна річ, з якою ми познайомимося в процесі розмови про STL – таблиці (або карти, maps) <Наступне висловлювання побудовано на тому, що по-англійськи цей клас STL називається map, тобто карта. У перекладі ж цей термін перекладач вважав за потрібне замінити на таблицю. - Прим. пер.> Карти – це класно Вони кажуть вам, як дістатися з Нью-Йорка в Колорадо найкоротшим шляхом, а також де ця чудова дорога йде з хайвею Вони не дадуть вам загубитися і допоможуть потрапити туди, куди ви їдете

Ну добре, я не мав на увазі карти цього типу Карта, map (або таблиця) є також і структурою даних в STL, яка надає зручний і потужний спосіб відобразити один вид даних в іншій Замість того, щоб намагатися пояснити концепцію таблиці, простіше використовувати приклад, щоб показати, що можуть для вас робити карти (я маю на увазі, крім того як перевести вас через хайвей Interstate 80)

У табл 54 наведено важливі методи класу map (таблиця) в STL

Таблиця 54 Важливі методи класу map

Вказує, чи є (FALSE) чи ні (TRUE) елементи в таблиці

Повертає кількість елементів, що знаходяться в даний момент в таблиці

Додає новий елемент в таблицю

Видаляє існуючий елемент з таблиці

Виконує пошук з даного ключу в таблиці

Знаходить елемент в таблиці, відповідний ключовому значенням

Повертає нижню межу таблиці, тобто перший елемент, що задовольняє даному ключовому значенням

Повертає максимальний можливий розмір таблиці (звичайно це максимальний обєм памяті, вільною для виділення)

Повертає останній елемент в таблиці (починаючи з кінця)

Повертає перший елемент в таблиці (починаючи з кінця)

Повертає виділений розмір таблиці, зазвичай це кількість елементів в таблиці

Міняє дані між двома таблицями

upper_bound

Повертає останній елемент, відповідний під дане ключове значення

Присвоює одній таблиці іншу, копіюючи всі дані з першої таблиці в другу

Потоковий оператор, який дозволяє виводити елемент таблиці у вихідний потік

Повертає перший елемент в таблиці

Повертає останній елемент в таблиці

Порівнює два елементи, використовуючи функцію порівняння таблиці

Виробляє задану дію над усіма елементами в таблиці Ось приклад застосування цього класу:

#include &ltstdioh&gt

#include &ltstdlibh&gt

#include &ltstringh&gt

#include &ltstring&gt

#include &ltmap&gt

int main(void)

{

map&ltstring, string, less&ltstring&gt,

allocator&ltstring&gt &gt stringMap stringMap[&quotKirk&quot] = &quotWilliam Shatner" stringMap[&quotMcCoy&quot] = &quotDeForest Kelley" stringMap[&quotSpock&quot] = &quotLeonard Nimoy" stringMap[&quotScotty&quot] = &quotJames Doohan" stringMap[&quotSulu&quot] = &quotGeorge Takei" stringMap[&quotUhura&quot] = &quotNichelle Nichols"

printf (Введіть персонажа:) char szBuffer [20] gets (szBuffer)

if  (stringMap[szBuffer]length() )

printf (Насправді це:% s \ n, stringMap [szBuffer] c_str ()) else

printf (Я не знаю такого персонажа \ n) return 0

}

У цьому прикладі ми инициализируем обєкт map, використовуючи рядок як ключове значення Ключове значення в цьому прикладі – прізвище (а у випадку персонажа Spock, ще й імя) персонажа в оригінальних серіях Star Trek (а раптом ви їх не впізнали), А значення, що привласнюється кожному ключу – імя актора, який грав цього персонажа у фільмі Потім ми запитуємо у користувача імя персонажа і друкуємо імя актора Якщо імя персонажа не знайдено, то возращением рядок буде порожній Ми розглядаємо це як умова помилки і говоримо користувачу, що такого персонажа не знайдено

Цей приклад показує кілька цікавих аспектів обєкта map По-перше, ви дійсно ставитеся до map як до масиву, з потенційно нецілі індексами У цьому випадку ми використовуємо рядок як індекс Друга річ, яка швидко стає ясною, полягає в тому, що ви можете мати тільки один елемент на кожне ключове значення в таблиці, інакше ви б не змогли визначити, який з елементів відноситься до даного індексу масиву Уявіть собі використання масиву цілих і отримання двох відповідей на вираження array [0]

Таблиці містять впорядковані пари даних Впорядковуючи їх, ми можемо вибудувати їх за алфавітом, наприклад для друку Крім того, ми можемо ставитися до таблиці як до словника, отримуючи визначення «слів»

Є багато дуже хороших прикладів використання таблиць У нашому прикладі з класом vector, зокрема, ми зверталися до пошукових і заміняє рядках як до масиву в програмі заміни рядків Ми могли б також легко створити таблицю ключів – пошукових рядків зі

значеннями – замінюють рядками Так як таблиці впорядковані, то пошук в таблиці заданого ключа працює дуже швидко Це робить таблиці чудовим вибором для простих структур, в яких потрібно швидкий пошук даних Макропорцесори, словники, календарі (розкладу) подій можуть виграти від структури та швидкості таблиць

Ще один клас в STL, multimap, дозволяє мати багато елементів, відповідних даному ключу Якщо у вас ситуація, яка здається ідеальною для таблиці, але ви не можете гарантувати єдиність елемента для кожного ключа в системі (скажімо пошук телефонного номера, в якому не обовязково зберігається код міста, наприклад), то вам варто звернути увагу замість map на клас multimap В основному методи і оператори для класу multimap (мультітабліца) в точності збігаються з методами та операторами класу map

Джерело: Теллес М – Borland C + + Builder Бібліотека програміста – 1998

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*