QMap::insertMulti или QMultiMap?

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

2 -> abc
2 -> def
3 -> Гхи
3 -> JKL

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

2 ответа

Решение

Классы контейнеров для чтения:

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 просто чтобы лучше задокументировать тот факт, что я собираюсь держать несколько значений одним и тем же ключом.

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

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

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

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

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

Другие вопросы по тегам