Злоупотребление QMap

Материал из Wiki.crossplatform.ru

(Различия между версиями)
Перейти к: навигация, поиск
 
(1 промежуточная версия не показана)
Строка 1: Строка 1:
-
{{Категория:Qt_Издания}}
+
{{Панель навигации по Qt Quarterly|Выпуск 1}}
-
__NOTOC__
+
(перевод [mailto:racheengel@ukrtop.com ''Racheengel''])<br />
(перевод [mailto:racheengel@ukrtop.com ''Racheengel''])<br />

Текущая версия на 04:07, 20 февраля 2009

Image:qt-logo_new.png Image:qq-title-article.png
Qt Quarterly | Выпуск 1 | Документация


(перевод 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.

Trademarks