Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
QHash< Key, T >::iterator Class Reference

\inmodule QtCore More...

#include <qhash.h>

+ Collaboration diagram for QHash< Key, T >::iterator:

Public Types

typedef std::forward_iterator_tag iterator_category
 
typedef qptrdiff difference_type
 
typedef T value_type
 
typedef T * pointer
 
typedef T & reference
 

Public Member Functions

constexpr iterator () noexcept=default
 Constructs an uninitialized iterator.
 
const Keykey () const noexcept
 Returns the current item's key as a const reference.
 
T & value () const noexcept
 Returns a modifiable reference to the current item's value.
 
T & operator* () const noexcept
 Returns a modifiable reference to the current item's value.
 
T * operator-> () const noexcept
 Returns a pointer to the current item's value.
 
bool operator== (const iterator &o) const noexcept
 
bool operator!= (const iterator &o) const noexcept
 
iteratoroperator++ () noexcept
 The prefix ++ operator ({++i}) advances the iterator to the next item in the hash and returns an iterator to the new current item.
 
iterator operator++ (int) noexcept
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.The postfix ++ operator ({i++}) advances the iterator to the next item in the hash and returns an iterator to the previously current item.
 
bool operator== (const const_iterator &o) const noexcept
 Returns true if other points to the same item as this iterator; otherwise returns false.
 
bool operator!= (const const_iterator &o) const noexcept
 Returns true if other points to a different item than this iterator; otherwise returns false.
 

Friends

class const_iterator
 
class QHash< Key, T >
 
class QSet< Key >
 

Detailed Description

template<typename Key, typename T>
class QHash< Key, T >::iterator

\inmodule QtCore

The QHash::iterator class provides an STL-style non-const iterator for QHash.

QHash<Key, T>iterator allows you to iterate over a QHash and to modify the value (but not the key) associated with a particular key. If you want to iterate over a const QHash, you should use QHash::const_iterator. It is generally good practice to use QHash::const_iterator on a non-const QHash as well, unless you need to change the QHash through the iterator. Const iterators are slightly faster, and can improve code readability.

The default QHash::iterator constructor creates an uninitialized iterator. You must initialize it using a QHash function like QHash::begin(), QHash::end(), or QHash::find() before you can start iterating. Here's a typical loop that prints all the (key, value) pairs stored in a hash:

hash.insert("January", 1);
hash.insert("February", 2);
...
hash.insert("December", 12);
for (auto i = hash.cbegin(), end = hash.cend(); i != end; ++i)
cout << qPrintable(key()) << ": " << i.value() << endl;

Unlike QMap, which orders its items by key, QHash stores its items in an arbitrary order.

Here's an example that increments every value stored in the QHash by 2:

for (auto i = hash.begin(), end = hash.end(); i != end; ++i)
i.value() += 2;

To remove elements from a QHash you can use erase_if(QHash<Key, T> &map, Predicate pred):

erase_if(hash, [](const QHash<QString, int>::iterator it) { return it.value() > 10; });

Multiple iterators can be used on the same hash. However, be aware that any modification performed directly on the QHash (inserting and removing items) can cause the iterators to become invalid.

Inserting items into the hash or calling methods such as QHash::reserve() or QHash::squeeze() can invalidate all iterators pointing into the hash. Iterators are guaranteed to stay valid only as long as the QHash doesn't have to grow/shrink its internal hash table. Using any iterator after a rehashing operation has occurred will lead to undefined behavior.

If you need to keep iterators over a long period of time, we recommend that you use QMap rather than QHash.

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 \l{Implicit sharing iterator problem}.
See also
QHash::const_iterator, QHash::key_iterator, QHash::key_value_iterator

Definition at line 1127 of file qhash.h.

Member Typedef Documentation

◆ difference_type

template<typename Key , typename T >
qptrdiff QHash< Key, T >::iterator::difference_type

Definition at line 1138 of file qhash.h.

◆ iterator_category

template<typename Key , typename T >
std::forward_iterator_tag QHash< Key, T >::iterator::iterator_category

Definition at line 1137 of file qhash.h.

◆ pointer

template<typename Key , typename T >
T* QHash< Key, T >::iterator::pointer

Definition at line 1140 of file qhash.h.

◆ reference

template<typename Key , typename T >
T& QHash< Key, T >::iterator::reference

Definition at line 1141 of file qhash.h.

◆ value_type

template<typename Key , typename T >
T QHash< Key, T >::iterator::value_type

Definition at line 1139 of file qhash.h.

Constructor & Destructor Documentation

◆ iterator()

template<typename Key , typename T >
QHash< Key, T >::iterator::iterator ( )
constexprdefaultnoexcept

Constructs an uninitialized iterator.

Functions like key(), value(), and operator++() must not be called on an uninitialized iterator. Use operator=() to assign a value to it before using it.

See also
QHash::begin(), QHash::end()

Member Function Documentation

◆ key()

template<typename Key , typename T >
const Key & QHash< Key, T >::iterator::key ( ) const
inlinenoexcept

Returns the current item's key as a const reference.

There is no direct way of changing an item's key through an iterator, although it can be done by calling QHash::erase() followed by QHash::insert().

See also
value()

Definition at line 1145 of file qhash.h.

◆ operator!=() [1/2]

template<typename Key , typename T >
bool QHash< Key, T >::iterator::operator!= ( const const_iterator & other) const
inlinenoexcept

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

See also
operator==()

Definition at line 1165 of file qhash.h.

◆ operator!=() [2/2]

template<typename Key , typename T >
bool QHash< Key, T >::iterator::operator!= ( const iterator & o) const
inlinenoexcept

Definition at line 1150 of file qhash.h.

◆ operator*()

template<typename Key , typename T >
T & QHash< Key, T >::iterator::operator* ( ) const
inlinenoexcept

Returns a modifiable reference to the current item's value.

Same as value().

See also
key()

Definition at line 1147 of file qhash.h.

◆ operator++() [1/2]

template<typename Key , typename T >
iterator & QHash< Key, T >::iterator::operator++ ( )
inlinenoexcept

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::end() leads to undefined results.

Definition at line 1152 of file qhash.h.

◆ operator++() [2/2]

template<typename Key , typename T >
iterator QHash< Key, T >::iterator::operator++ ( int )
inlinenoexcept

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.The postfix ++ operator ({i++}) advances the iterator to the next item in the hash and returns an iterator to the previously current item.

Definition at line 1157 of file qhash.h.

◆ operator->()

template<typename Key , typename T >
T * QHash< Key, T >::iterator::operator-> ( ) const
inlinenoexcept

Returns a pointer to the current item's value.

See also
value()

Definition at line 1148 of file qhash.h.

◆ operator==() [1/2]

template<typename Key , typename T >
bool QHash< Key, T >::iterator::operator== ( const const_iterator & other) const
inlinenoexcept

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

See also
operator!=()

Definition at line 1164 of file qhash.h.

◆ operator==() [2/2]

template<typename Key , typename T >
bool QHash< Key, T >::iterator::operator== ( const iterator & o) const
inlinenoexcept

Definition at line 1149 of file qhash.h.

◆ value()

template<typename Key , typename T >
T & QHash< Key, T >::iterator::value ( ) const
inlinenoexcept

Returns a modifiable reference to the current item's value.

You can change the value of an item by using value() on the left side of an assignment, for example:

if (i.key() == "Hello")
i.value() = "Bonjour";
See also
key(), operator*()

Definition at line 1146 of file qhash.h.

Friends And Related Symbol Documentation

◆ const_iterator

template<typename Key , typename T >
friend class const_iterator
friend

Definition at line 1130 of file qhash.h.

◆ QHash< Key, T >

template<typename Key , typename T >
friend class QHash< Key, T >
friend

Definition at line 1130 of file qhash.h.

◆ QSet< Key >

template<typename Key , typename T >
friend class QSet< Key >
friend

Definition at line 1130 of file qhash.h.


The documentation for this class was generated from the following files: