QMap :: insertMulti или QMultiMap? - PullRequest
       17

QMap :: insertMulti или QMultiMap?

6 голосов
/ 07 января 2011

Что я должен использовать между QMap :: insertMulti и QMultiMap для обработки:

2 -> abc
2 -> def
3 -> ghi
3 -> jkl

Какая разница, введите 2 решения?

Ответы [ 2 ]

7 голосов
/ 07 января 2011

Чтение Классы контейнеров :

QMap<Key, T>
This provides a dictionary (associative array) that maps keys of type Key to values of type T. Normally each key is associated with a single value. QMap stores its data in Key order; if order doesn't matter QHash is a faster alternative.

QMultiMap<Key, T>
This is a convenience subclass of QMap that provides a nice interface for multi-valued maps, i.e. maps where one key can be associated with multiple values.

похоже, что оба могут сделать работу. В этом документе также есть раздел Алгоритмическая сложность , где видно, что оба класса имеют одинаковую сложность.

Я бы выбрал QMultiMap, чтобы лучше задокументировать тот факт, что я собираюсь хранить несколько значений одним и тем же ключом.

5 голосов
/ 07 января 2011

Оба могут служить этой цели.QMultiMap на самом деле является подклассом QMap.

Если вы хотите иметь несколько значений для одного ключа, вы можете использовать: QMap: для вставки используйте insertMulti QMultiMap: для вставки используйте insert

Если выжелая иметь одно значение для одного ключа, вы можете использовать: QMap: для вставки используйте вставку QMultiMap: для вставки используйте замену

Вы можете видеть, что оба могут обслуживать обе цели.Но у каждого есть уникальное поведение по умолчанию, которое соответствует его имени.Также у каждого есть несколько методов или операторов, что удобно для одного / нескольких.

Лучше выбрать тип в зависимости от ваших потребностей.Это хорошая практика.Например, если вы используете QMap для хранения нескольких значений одного ключа, у другого человека, который просматривает членов вашего класса, может сложиться впечатление, что вы хотите сохранить пары значений одного ключа (из типа данных) Аналогично, если вы используете QMultiMapлюбой, кто читает определение, может понять, что данные будут иметь несколько значений для одного и того же ключа.

...