このページでは

QMutableHashIterator Class

template <typename Key, typename T> class QMutableHashIterator

QMutableHashIterator クラスは、QHash およびQMultiHash に対して、Java スタイルの非定数イテレータを提供します。詳細...

ヘッダー: #include <QMutableHashIterator>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

パブリック関数

QMutableHashIterator(QHash<Key, T> &hash)
bool findNext(const T &value)
bool hasNext() const
const Key &key() const
QMutableHashIterator<Key, T>::Item next()
QMutableHashIterator<Key, T>::Item peekNext() const
void remove()
void setValue(const T &value)
void toBack()
void toFront()
const T &value() const
T &value()
QMutableHashIterator<Key, T> &operator=(QHash<Key, T> &hash)

詳細な説明

QHash Java スタイルのイテレータと STL スタイルのイテレータの両方を備えています。STL スタイルのイテレータの方が効率が良いため、そちらを優先して使用すべきです。テンプレートパラメータ `Key ` はハッシュのキー型を指定し、`T ` は値型を指定します。

QMutableHashIterator<Key, T> を使用すると、QHash を反復処理しながらハッシュを変更することができます。ハッシュを変更したくない場合(またはQHash が const である場合)は、代わりに、わずかに高速なQHashIterator を使用してください。

QMutableHashIteratorのコンストラクタは、引数としてQHash を受け取ります。生成後、イテレータはハッシュの先頭(最初の要素の前)に位置します。すべての要素を順次反復処理する方法は次のとおりです。

QHash<int,QWidget*>hash;
//...
QMutableHashIterator<int,QWidget*>i(hash);
while(i.hasNext()) {
    i.next();
    qDebug() << i.key() << ": " << i.value();
}

next() 関数は、ハッシュ内の次の要素を返し、イテレータを進めます。key() およびvalue() 関数は、スキップされた直前の要素のキーと値を返します。

STL スタイルのイテレータとは異なり、Java スタイルのイテレータは要素を直接指すのではなく、要素間の位置を指します。next() の最初の呼び出しは、イテレータを 1 番目と 2 番目の要素の間にある位置に進め、1 番目の要素を返します。next() の 2 回目の呼び出しは、イテレータを 2 番目と 3 番目の要素の間にある位置に進めます。以下同様です。

項目 A、B、C、D の間のイテレータの位置

特定の値がどこに現れるかをすべて調べたい場合は、ループ内でfindNext() を使用します。例えば:

QMutableHashIterator<int,QWidget*>i(hash);
while(i.findNext(widget)) {
    qDebug() << "Found widget " << widget << " under key "
           <<i.key();
}

ハッシュを反復処理しながら要素を削除したい場合は、remove() を使用してください。要素の値を変更したい場合は、setValue() を使用してください。

例:

QMutableHashIterator<QString, QString> i(hash);
while (i.hasNext()) {
    i.next();
    if (i.key() == i.value())
        i.remove();
}

この例では、キーと値が同じであるすべての (キー, 値) ペアを削除します。

特定のハッシュに対して、一度にアクティブにできる可変イテレータは1つだけです。さらに、イテレータがアクティブな間は、ハッシュに対して直接変更を行ってはなりません(イテレータを介して行う場合は除く)。これは、イテレータを無効にし、未定義の挙動を引き起こす可能性があるためです。

QHashIterator およびQHash::iteratorも参照してください 。

メンバ関数のドキュメント

QMutableHashIterator::QMutableHashIterator(QHash<Key, T> &hash)

hash を走査するためのイテレータを生成します。このイテレータは、ハッシュの先頭(最初の要素の前)に位置するように設定されます。

operator=()も参照してください 。

bool QMutableHashIterator::findNext(const T &value)

現在のイテレータの位置から前方に向かって、value を検索します。値がvalue である (key, value) のペアが見つかった場合はtrue を返し、見つからなかった場合はfalse を返します。

呼び出し後、value が見つかった場合は、イテレータは一致する項目の直後に位置付けられます。見つからなかった場合は、イテレータはコンテナの末尾に位置付けられます。

bool QMutableHashIterator::hasNext() const

イテレータの先方に少なくとも1つの要素が存在する場合、つまりイテレータがコンテナの末尾にない場合は、true を返します。それ以外の場合は、false を返します。

next()も参照してください 。

const Key &QMutableHashIterator::key() const

トラバーサル関数(next()、findNext())のいずれかを使用してスキップされた最後の項目のキーを返します。

value()も参照してください 。

QMutableHashIterator<Key, T>::Item QMutableHashIterator::next()

次の項目を返し、イテレータを1つ分進めます。

戻り値に対してkey()を呼び出すと項目のキーを取得でき、value()を呼び出すと値を取得できます。

コンテナの末尾にあるイテレータに対してこの関数を呼び出すと、予期しない結果になります。

hasNext() およびpeekNext()も参照してください 。

QMutableHashIterator<Key, T>::Item QMutableHashIterator::peekNext() const

イテレータを移動させることなく、次の項目への参照を返します。

戻り値に対してkey()を呼び出すと項目のキーを取得でき、value()を呼び出すと値を取得できます。

コンテナの末尾にあるイテレータに対してこの関数を呼び出すと、定義されていない結果となります。

hasNext() およびnext()も参照してください 。

void QMutableHashIterator::remove()

トラバーサル関数(next()、findNext())のいずれかを使用してスキップされた最後の項目を削除します。

setValue()も参照してください 。

void QMutableHashIterator::setValue(const T &value)

value を使用して、いずれかの探索関数によってスキップされた最後の項目の値を置き換えます。

トラバーサル関数には、next() およびfindNext() があります。

key()、value()、およびremove()も参照してください 。

void QMutableHashIterator::toBack()

イテレータをコンテナの末尾(最後の要素の直後)に移動します。

toFront()も参照してください 。

void QMutableHashIterator::toFront()

イテレータをコンテナの先頭(最初の要素の前)に移動します。

toBack() およびnext()も参照してください 。

const T &QMutableHashIterator::value() const

トラバーサル関数(next()、findNext())のいずれかを使用してスキップされた最後の項目の値を返します。

key() およびsetValue()も参照してください 。

T &QMutableHashIterator::value()

トラバーサル関数のいずれかを使用してスキップされた最後の項目の値への非const参照を返します。

QMutableHashIterator<Key, T> &QMutableHashIterator::operator=(QHash<Key, T> &hash)

イテレータが `hash` 上で動作するようにします。イテレータは、ハッシュの先頭(最初の要素の前)に位置するように設定されます。

toFront() およびtoBack()も参照してください 。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.