Qt 5.13 | Qt Core | C++ Classes | QMultiMap

Qt 5.13.2 Reference Documentation

# QMultiMap Class

The QMultiMap class is a convenience QMap subclass that provides multi-valued maps. More...

Header: | #include <QMultiMap>
qmake: | QT += core
Inherits: | QMap

- List of all members, including inherited members

Note: All functions in this class are reentrant.

## Detailed Description

QMultiMap<Key, T> is one of Qt's generic container classes. It inherits QMap and extends it with a few convenience functions that make it more suitable than QMap for storing multi-valued maps. A multi-valued map is a map that allows multiple values with the same key; QMap normally doesn't allow that, unless you call QMap::insertMulti().

Because QMultiMap inherits QMap, all of QMap's functionality also applies to QMultiMap. For example, you can use isEmpty() to test whether the map is empty, and you can traverse a QMultiMap using QMap's iterator classes (for example, QMapIterator). But in addition, it provides an insert() function that corresponds to QMap::insertMulti(), and a replace() function that corresponds to QMap::insert(). It also provides convenient operator+() and operator+=().

Example:

      QMultiMap<QString, int> map1, map2, map3;

      map1.insert("plenty", 100);
      map1.insert("plenty", 2000);
      // map1.size() == 2

      map2.insert("plenty", 5000);
      // map2.size() == 1

      map3 = map1 + map2;
      // map3.size() == 3

Unlike QMap, QMultiMap provides no operator[]. Use value() or replace() if you want to access the most recently inserted item with a certain key.

If you want to retrieve all the values for a single key, you can use values(const Key &key), which returns a QList<T>:

      QList<int> values = map.values("plenty");
      for (int i = 0; i < values.size(); ++i)
          cout << values.at(i) << endl;

The items that share the same key are available from most recently to least recently inserted.

If you prefer the STL-style iterators, you can call find() to get the iterator for the first item with a key and iterate from there:

      QMultiMap<QString, int>::iterator i = map.find("plenty");
      while (i != map.end() && i.key() == "plenty") {
          cout << i.value() << endl;
          ++i;
      }

QMultiMap's key and value data types must be assignable data types. This covers most data types you are likely to encounter, but the compiler won't let you, for example, store a QWidget as a value; instead, store a QWidget *. In addition, QMultiMap's key type must provide operator<(). See the QMap documentation for details.

See also QMap, QMapIterator, QMutableMapIterator, and QMultiHash.