QHash::key_iterator Class | Qt Core | Qt 6.11.2
Description: The QHash::key_iterator class provides an STL-style const iterator for QHash keys.

- Qt 6.11
- Qt Core
- C++ Classes
- key_iterator
- Qt 6.11.2 Reference Documentation

# QHash::key_iterator Class

class QHash::key_iterator

The QHash::key_iterator class provides an STL-style const iterator for QHash keys. More...

- List of all members, including inherited members

## Public Functions

QHash<Key, T>::const_iterator | base() const
bool | operator!=(QHash<Key, T>::key_iterator other) const
const Key & | operator*() const
QHash<Key, T>::key_iterator & | operator++()
QHash<Key, T>::key_iterator | operator++(int)
const Key * | operator->() const
bool | operator==(QHash<Key, T>::key_iterator other) const

## Detailed Description

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

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

     for (auto it = hash.cbegin(), end = hash.cend(); it != end; ++it) {
         cout << "The key: " << it.key() << endl;
         cout << "The value: " << qPrintable(it.value()) << endl;
         cout << "Also the value: " << qPrintable(*it) << endl;
     }

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

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

     // Efficient, no memory allocation needed
     int primeNums = std::count_if(hash.keyBegin(), hash.keyEnd(), isPrimeNumber);
     qDeleteAll(hash2.keyBegin(), hash2.keyEnd());

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

The default QHash::key_iterator constructor creates an uninitialized iterator. You must initialize it using a QHash function like QHash::keyBegin() or QHash::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 QHash::const_iterator and QHash::iterator.

## Member Function Documentation

### `[noexcept]` QHash<Key, T>::const_iterator key_iterator::base() const

Returns the underlying const_iterator this key_iterator is based on.

### `[noexcept]` bool key_iterator::operator!=(QHash<Key, T>::key_iterator other) const

Returns `true` if other points to a different item than this iterator; otherwise returns `false`.

See also operator==().

### `[noexcept]` const Key &key_iterator::operator*() const

Returns the current item's key.

### `[noexcept]` QHash<Key, T>::key_iterator &key_iterator::operator++()

The prefix ++ operator (`++i`) advances the iterator to the next item in the hash and returns an iterator to the new current item.

Calling this function on QHash::keyEnd() leads to undefined results.

### `[noexcept]` QHash<Key, T>::key_iterator key_iterator::operator++(int)

The postfix ++ operator (`i++`) advances the iterator to the next item in the hash and returns an iterator to the previous item.

This is an overloaded function.

### `[noexcept]` const Key *key_iterator::operator->() const

Returns a pointer to the current item's key.

### `[noexcept]` bool key_iterator::operator==(QHash<Key, T>::key_iterator other) const

Returns `true` if other points to the same item as this iterator; otherwise returns `false`.

See also operator!=().