CopperSpice API  2.0.0
QMutableMultiHashIterator< Key, Val, Hash, KeyEqual > Class Template Reference

The QMutableMultiHashIterator class provides a Java style non-const iterator for QMultiHash. More...

Public Methods

 QMutableMultiHashIterator (QMultiHash< Key, Val, Hash, KeyEqual > &hash)
 
 ~QMutableMultiHashIterator () = default
 
bool findNext (const Val &value)
 
bool findPrevious (const Val &value)
 
bool hasNext () const
 
bool hasPrevious () const
 
const Key & key () const
 
Item next ()
 
QMutableMultiHashIterator & operator= (QMultiHash< Key, Val, Hash, KeyEqual > &hash)
 
Item peekNext () const
 
Item peekPrevious () const
 
Item previous ()
 
void remove ()
 
void setValue (const Val &value)
 
void toBack ()
 
void toFront ()
 
Val & value ()
 
const Val & value () const
 

Detailed Description

template<typename Key, typename Val, typename Hash, typename KeyEqual>
class QMutableMultiHashIterator< Key, Val, Hash, KeyEqual >

The QMutableMultiHashIterator class provides a Java style non-const iterator for QMultiHash. QMultiHash has both Java style iterators and STL style iterators.

QMultiHashIterator allows you to iterate over a QMultiHash. If you want to modify the hash as you iterate over it, use QMutableMultiHashIterator instead.

After construction the iterator is located at the very beginning of the hash, before the first item. The following code shows how to iterate over all the elements sequentially.

while (iter.hasNext()) {
iter.next();
qDebug() << iter.key() << ": " << iter.value();
}

The next() method returns the next item in the hash and advances the iterator. The key() and value() methods return the key and value of the last item which was jumped over.

Unlike STL style iterators, Java style iterators point between items rather than directly at items. The first call to next() advances the iterator to the position between the first and second item, and returns the first item; the second call to next() advances the iterator to the position between the second and third item, and so on.

Here is how to iterate over the elements in reverse order:

iter.toBack();
while (iter.hasPrevious()) {
iter.previous();
qDebug() << iter.key() << ": " << iter.value();
}

If you want to find all occurrences of a particular value use findNext() or findPrevious():

while (iter.findNext(widget)) {
qDebug() << "Found widget " << widget << " under key " << iter.key();
}

If you want to remove items as you iterate over the hash, use remove(). If you want to modify the value of an item, use setValue().

while (iter.hasNext()) {
iter.next();
if (iter.key() == iter.value()) {
iter.remove();
}
}

The example above removes all (key, value) pairs where the key and the value are the same.

See also
QMultiHashIterator

Constructor & Destructor Documentation

template<typename Key , typename Val , typename Hash , typename KeyEqual >
QMutableMultiHashIterator< Key, Val, Hash, KeyEqual >::QMutableMultiHashIterator ( QMultiHash< Key, Val, Hash, KeyEqual > &  hash)
inline

Constructs an iterator for traversing hash. The iterator is set to the beginning of the list before the first item.

See also
operator=()
template<typename Key , typename Val , typename Hash , typename KeyEqual >
QMutableMultiHashIterator< Key, Val, Hash, KeyEqual >::~QMutableMultiHashIterator ( )
default

Destroys the iterator.

Method Documentation

template<typename Key , typename Val , typename Hash , typename KeyEqual >
bool QMutableMultiHashIterator< Key, Val, Hash, KeyEqual >::findNext ( const Val &  value)
inline

Searches for value starting from the current iterator position and moving forward. Returns true if a (key, value) pair with the specified value is found, otherwise it returns false. If value is found the iterator is positioned just after the matching item, otherwise the iterator is positioned at the end of the container.

See also
findPrevious()
template<typename Key , typename Val , typename Hash , typename KeyEqual >
bool QMutableMultiHashIterator< Key, Val, Hash, KeyEqual >::findPrevious ( const Val &  value)
inline

Searches for value starting from the current iterator position and moving backward. Returns true if a (key, value) pair with the specified value is found, otherwise it returns false. If value was found the iterator is positioned just before the matching item. Otherwise the iterator is positioned at the beginning of the container.

See also
findNext()
template<typename Key , typename Val , typename Hash , typename KeyEqual >
bool QMutableMultiHashIterator< Key, Val, Hash, KeyEqual >::hasNext ( ) const
inline

Returns true if there is at least one item after the iterator, otherwise returns false.

See also
hasPrevious(), next()
template<typename Key , typename Val , typename Hash , typename KeyEqual >
bool QMutableMultiHashIterator< Key, Val, Hash, KeyEqual >::hasPrevious ( ) const
inline

Returns true if there is at least one item before the iterator, otherwise returns false.

See also
hasNext(), previous()
template<typename Key , typename Val , typename Hash , typename KeyEqual >
const Key & QMutableMultiHashIterator< Key, Val, Hash, KeyEqual >::key ( ) const
inline

Returns a reference for the key of the last item that was jumped over using one of the traversal methods next(), previous(), findNext(), findPrevious().

See also
value()
template<typename Key , typename Val , typename Hash , typename KeyEqual >
Item QMutableMultiHashIterator< Key, Val, Hash, KeyEqual >::next ( )
inline

Returns the next item and advances the iterator by one position. Call key() on the return value to obtain the key or call value() to obtain the value.

Calling this method on an iterator located at the end of the container causes undefined behavior.

See also
hasNext(), peekNext(), previous()
template<typename Key , typename Val , typename Hash , typename KeyEqual >
QMutableMultiHashIterator & QMutableMultiHashIterator< Key, Val, Hash, KeyEqual >::operator= ( QMultiHash< Key, Val, Hash, KeyEqual > &  hash)
inline

Sets the iterator to the beginning of the hash before the first item.

See also
toFront(), toBack()
template<typename Key , typename Val , typename Hash , typename KeyEqual >
Item QMutableMultiHashIterator< Key, Val, Hash, KeyEqual >::peekNext ( ) const
inline

Returns the next item without moving the iterator. Call key() on the return value to obtain the key or call value() to obtain the value.

Calling this method on an iterator located at the end of the container causes undefined behavior.

See also
hasNext(), next(), peekPrevious()
template<typename Key , typename Val , typename Hash , typename KeyEqual >
Item QMutableMultiHashIterator< Key, Val, Hash, KeyEqual >::peekPrevious ( ) const
inline

Returns the previous item without moving the iterator. Call key() on the return value to obtain the key or call value() to obtain the value.

Calling this method on an iterator located at the beginning of the container causes undefined behavior.

See also
hasPrevious(), previous(), peekNext()
template<typename Key , typename Val , typename Hash , typename KeyEqual >
Item QMutableMultiHashIterator< Key, Val, Hash, KeyEqual >::previous ( )
inline

Returns the previous item and moves the iterator back by one position. Call key() on the return value to obtain the key or call value() to obtain the value.

Calling this method on an iterator located at the beginning of the container causes undefined behavior.

See also
hasPrevious(), peekPrevious(), next()
template<typename Key , typename Val , typename Hash , typename KeyEqual >
void QMutableMultiHashIterator< Key, Val, Hash, KeyEqual >::remove ( )
inline

Removes the last item that was jumped over using one of the traversal methods. The traversal methods are next(), previous(), findNext(), and findPrevious().

See also
setValue()
template<typename Key , typename Val , typename Hash , typename KeyEqual >
void QMutableMultiHashIterator< Key, Val, Hash, KeyEqual >::setValue ( const Val &  value)
inline

Replaces the value of the last item with the given value.

See also
key(), value(), remove()
template<typename Key , typename Val , typename Hash , typename KeyEqual >
void QMutableMultiHashIterator< Key, Val, Hash, KeyEqual >::toBack ( )
inline

Moves the iterator to the end of the container after the last item.

See also
toFront(), previous()
template<typename Key , typename Val , typename Hash , typename KeyEqual >
void QMutableMultiHashIterator< Key, Val, Hash, KeyEqual >::toFront ( )
inline

Moves the iterator to the beginning of the container before the first item.

See also
toBack(), next()
template<typename Key , typename Val , typename Hash , typename KeyEqual >
Val & QMutableMultiHashIterator< Key, Val, Hash, KeyEqual >::value ( )
inline

Returns a non-const reference to the value of the last item that was jumped over using one of the traversal methods.

template<typename Key , typename Val , typename Hash , typename KeyEqual >
const Val & QMutableMultiHashIterator< Key, Val, Hash, KeyEqual >::value ( ) const
inline

Returns a reference for the value of the last item that was jumped over using one of the traversal methods next(), previous(), findNext(), findPrevious().

See also
key(), setValue()