Злоупотребление QMap
Материал из Wiki.crossplatform.ru
Lit-uriy (Обсуждение | вклад) (Добавил в категорию Qt_Издания) |
Root (Обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
+ | {{Категория:Qt_Издания}} | ||
+ | __NOTOC__ | ||
+ | |||
(перевод [mailto:racheengel@ukrtop.com ''Racheengel''])<br /> | (перевод [mailto:racheengel@ukrtop.com ''Racheengel''])<br /> | ||
Версия 08:40, 25 ноября 2008
__NOTOC__
(перевод Racheengel)
Класс QMap<Key, Value> сохраняет пары (ключ, значение), где каждый ключ ассоциирован с отдельным значением. В данной статье представлен "грязный и быстрый" трюк, позволяющий связывать ключи с несколькими значениями.
Основная идея - заменить тип Value более сложным, например, QValueList<Value>, так:
QMap<QString, QStringList> map;
(QStringList - это расширение QValueList<QString>.) Вставка значения в "мульти-карту" простая:
map["presidents"].append( "George Washington" );
Если мульти-карта map уже содержит ключ "presidents" key, map[presidents] вернет ссылку наQStringList, который ему соответствует; иначе будет автоматически создан пустой QStringList.
Другие действия - проверка существования пары (ключ, значение) и удаление пары -- так же просты:
if ( map["presidents"].contains("Bill Clinton") ) map["presidents"].remove( "Ronald Reagan" );
Вышеприведенная операция remove() удалит пару ("presidents", "Ronald Reagan") из карты, если карта содержала ее; иначе ничего не будет сделано. Мы можем также вставить одну и ту же пару несколько раз:
map["presidents"].append( "George Bush" ); map["presidents"].append( "George Bush" );
Удаление одной из них аналогично:
map["presidents"].remove( map["presidents"].find("George Bush") );
В программировании, как и в политике, наличие дубликатов не всегда приветствуется. При добавлении новой пары, это можно обойти так:
if ( !map["presidents"].contains("John Adams") ) map["presidents"].append( "John Adams" );
Также можно лекго удалить их все сразу:
map["presidents"].remove( "John Adams" );
Copyright © 2002 Trolltech. |