key_iterator Class

class QMap::key_iterator

The QMap::key_iterator class provides an STL-style const iterator for QMap and QMultiMap keys. More...

This class was introduced in Qt 5.6.

Detailed Description

QMap::key_iterator is essentially the same as QMap::const_iterator with the difference that operator*() and operator->() return a key instead of a value.

For most uses QMap::iterator and QMap::const_iterator should be used, you can easily access the key by calling QMap::iterator::key():

 for (QMap<int, QString>::const_iterator it = map.cbegin(), end = map.cend(); it != end; ++it) {
     cout << "The key: " << it.key() << Qt::endl
     cout << "The value: " << it.value() << Qt::endl;
     cout << "Also the value: " << (*it) << Qt::endl;
 }

However, to have interoperability between QMap's keys and STL-style algorithms we need an iterator that dereferences to a key instead of a value. With QMap::key_iterator we can apply an algorithm to a range of keys without having to call QMap::keys(), which is inefficient as it costs one QMap iteration and memory allocation to create a temporary QList.

 // Inefficient, keys() is expensive
 QList<int> keys = map.keys();
 int numPrimes = std::count_if(map.cbegin(), map.cend(), isPrimeNumber);
 qDeleteAll(map2.keys());

 // Efficient, no memory allocation needed
 int numPrimes = std::count_if(map.keyBegin(), map.keyEnd(), isPrimeNumber);
 qDeleteAll(map2.keyBegin(), map2.keyEnd());

QMap::key_iterator is const, it's not possible to modify the key.

The default QMap::key_iterator constructor creates an uninitialized iterator. You must initialize it using a QMap function like QMap::keyBegin() or QMap::keyEnd().

Warning: Iterators on implicitly shared containers do not work exactly like STL-iterators. You should avoid copying a container while iterators are active on that container. For more information, read Implicit sharing iterator problem.

See also QMap::const_iterator and QMap::iterator.