Словари QMap<K,T>, QMultiMap<K,T>

   
На этом шаге рассмотрим cловари QMap<K,T>, QMultiMap<K,T>.

   
Словари, в принципе, похожи на обычные, используемые в повседневной жизни. Они хранят элементы одного и того же типа, индексируемые ключевыми значениями. Главное достоинство словаря в том, что он позволяет быстро получать значение, ассоциированное с заданным ключом. Ключи должны быть уникальными (рис. 1а), за исключением мультисловаря, который допускает дубликаты (рис. 1б).


Рис.1. Словарь (а) и мультисловарь (б)

   
В контейнеры этого типа заносятся элементы вместе с ключами, по которым их можно найти и которыми могут выступать значения любого типа. В случае со словарем QMap<K,T> необходимо следить за тем, чтобы не было занесено двух разных элементов с одинаковым ключом, ведь в таком случае один из этих элементов невозможно будет отыскать. Каждый ключ словаря QMap<K,T> должен быть уникален.

   
При создании объекта класса QMap<K,T> нужно передать его размер в конструктор. Этот размер не является, как это принято в других контейнерных классах, размером, ограничивающим максимальное количество элементов, а представляет собой количество позиций. Количество позиций должно быть больше количества элементов, ожидаемых для хранения, иначе поиск элементов в словаре будет проводиться недостаточно эффективно. Желательно, чтобы это значение относилось к разряду простых чисел, т. к. в этом случае размещение элементов будет более удобным. Таблица 1 содержит некоторые из методов класса QMap<K,T>.

Таблица 1. Некоторые методы контейнера QMap<K,T>

МетодОписание
lowerBound()Возвращает итератор, указывающий на первый элемент с заданным ключом
toStdMap()Возвращает стандартный словарь STL с элементами, находящимися в объекте QMap<T>
upperBound()Возвращает итератор, указывающий на последний элемент с заданным ключом

   
Одним из самых частых способов обращения к элементам словаря является использование
ключа в операторе []. Но можно обойтись и без него, т. к. ключ и значение можно получить с помощью методов итератора key() и value(), например:

QCoreApplication a(argc, argv);
QMap<QString, QString> mapPhbook;
mapPhbook["Olga"] = "+79128795566";
mapPhbook["Gleb"] = "+79195489785";
mapPhbook["Oleg"] = "+79125487898";
QMap<QString, QString>::iterator it = mapPhbook.begin();
for (;it != mapPhbook.end(); ++it)
{
    qDebug() << "Name: " << it.key() << " Phone: " << it.value();
}


Рис.2. Результат работы программы

   
Файлы приложения можно взять Предыдущий шаг
Содержание
Следующий шаг



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий