iterator Class

class QHash::iterator

QHash::iterator クラスは、QHash 用の STL スタイルの非 const イテレータを提供します。さらに...

パブリック関数

iterator()
const Key &key() const
T &value() const
bool operator!=(const QHash<Key, T>::const_iterator &other) const
bool operator!=(const QHash<Key, T>::iterator &other) const
T &operator*() const
QHash<Key, T>::iterator &operator++()
QHash<Key, T>::iterator operator++(int)
T *operator->() const
bool operator==(const QHash<Key, T>::const_iterator &other) const
bool operator==(const QHash<Key, T>::iterator &other) const

詳細説明

QHash<Key, T>::iterator は、QHash を繰り返し処理し、特定のキーに関連付けられた値 (キーではない) を変更することができます。QHash を反復処理したい場合は、QHash::const_iterator を使用する必要があります。イテレータを使用してQHash を変更する必要がない限り、constQHash 以外でもQHash::const_iterator を使用するのが一般的です。const イテレータのほうが若干高速で、コードの可読性も向上します。

デフォルトのQHash::iterator コンストラクタは、初期化されていないイテレータを作成します。QHash::begin ()、QHash::end ()、QHash::find ()のようなQHash 関数を使用して初期化しなければなりません。以下は、ハッシュに格納されたすべての(キー、値)ペアを表示する典型的なループです:

QHash<QString, int> 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;

項目をキー順に並べるQMap とは異なり、QHash は任意の順序で項目を格納する。

以下は、QHash に格納されているすべての値を2ずつインクリメントする例である:

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

QHash から要素を削除するには、erase_if(QHash<Key, T> &map, Predicate pred)を使います:

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

複数のイテレータを同じハッシュに使用することができます。しかし、QHash (項目の挿入や削除)に対して直接行われる修正は、イテレータを無効にしてしまう可能性があることに注意してください。

ハッシュに項目を挿入したり、QHash::reserve() やQHash::squeeze() などのメソッドを呼び出したりすると、ハッシュを指すすべてのイテレータが無効になる可能性があります。イテレータは、QHash がその内部ハッシュ・テーブルを拡大/縮小する必要がない限り、有効であり続けることが保証される。再ハッシュ操作が発生した後にイテレータを使用すると、未定義の動作につながります。

長期間イテレータを保持する必要がある場合は、QHash ではなくQMap を使用することをお勧めします。

警告: 暗黙的に共有されたコンテナ上のイテレータは、STLイテレータのようには動作しません。そのコンテナ上でイテレータがアクティブになっている間は、コンテナのコピーを避けるべきである。詳細については、暗黙の共有イテレータ問題を参照してください。

QHash::const_iteratorQHash::key_iteratorQHash::key_value_iteratorも参照

メンバ関数ドキュメント

[noexcept] bool iterator::operator==(const QHash<Key, T>::const_iterator &other) const

[noexcept] bool iterator::operator==(const QHash<Key, T>::iterator &other) const

other がこのイテレータと同じ項目を指している場合はtrue を返し、そうでない場合はfalse を返す。

operator!=()も参照

[noexcept] bool iterator::operator!=(const QHash<Key, T>::const_iterator &other) const

[noexcept] bool iterator::operator!=(const QHash<Key, T>::iterator &other) const

other がこのイテレータと異なる項目を指している場合はtrue を返し、そうでない場合はfalse を返す。

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

[constexpr noexcept] iterator::iterator()

初期化されていないイテレータを構築します。

key()、value()、 operator++() などの関数を、初期化されていないイテレータで呼び出してはいけません。operator=() を使用して値を代入してから使用してください。

QHash::begin() およびQHash::end()も参照してください

[noexcept] const Key &iterator::key() const

現在の項目のキーを const 参照として返します。

アイテムのキーをイテレータで直接変更する方法はありませんが、QHash::erase() の後にQHash::insert() を呼び出すことで変更できます。

value()も参照

[noexcept] T &iterator::value() const

現在の項目の値への変更可能な参照を返します。

例えば、代入の左辺で value() を使用することで、項目の値を変更できます:

if (i.key() == "Hello")
    i.value() = "Bonjour";

key() およびoperator*()も参照

[noexcept] T &iterator::operator*() const

現在の項目の値への変更可能な参照を返します。

value() と同じ。

key() も参照

[noexcept] QHash<Key, T>::iterator &iterator::operator++()

接頭辞 ++ 演算子 (++i) は、イテレータをハッシュ内の次の項目に進め、新しい現在の項目へのイテレータを返します。

この関数をQHash::end() で呼び出すと、未定義の結果になります。

[noexcept] QHash<Key, T>::iterator iterator::operator++(int)

これはオーバーロードされた関数です。

postfix ++ 演算子 (i++) は、イテレータをハッシュ内の次の項目に進め、それ以前の現在の項目へのイテレータを返します。

[noexcept] T *iterator::operator->() const

現在の項目の値へのポインタを返します。

value()も参照

©2024 The Qt Company Ltd. 本文書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。