Класс QMutableHashIterator
Класс QMutableHashIterator предоставляет итератор в стиле Java для QHash и QMultiHash, который не является константным. Подробнее...
| Заголовок: | #include <QMutableHashIterator> |
| qmake: | QT += core |
Открытые функции
| QMutableHashIterator(QHash<Key, T> &hash) | |
| QMutableHashIterator<Key, T> & | operator=(QHash<Key, T> &container) |
| bool | findNext(const T &value) |
| bool | findPrevious(const T &value) |
| bool | hasNext() const |
| bool | hasPrevious() const |
| const Key & | key() const |
| QMutableHashIterator::Item | next() |
| QMutableHashIterator::Item | peekNext() const |
| QMutableHashIterator::Item | peekPrevious() const |
| QMutableHashIterator::Item | previous() |
| void | remove() |
| void | setValue(const T &value) |
| void | toBack() |
| void | toFront() |
| const T & | value() const |
| T & | value() |
Подробное описание
QHash имеет как итераторы в стиле Java, так и итераторы в стиле STL. Итераторы в стиле Java более высокого уровня и проще в использовании, чем итераторы в стиле STL; с другой стороны, они немного менее эффективны.
QMutableHashIterator<Key, T> позволяет итерироваться по QHash (или QMultiHash) и изменять хеш. Если вы не хотите изменять хеш (или у вас есть константный QHash), используйте немного более быстрый QHashIterator.
Конструктор QMutableHashIterator принимает QHash в качестве аргумента. После создания итератор находится в самом начале хеша (перед первым элементом). Вот как итерироваться по всем элементам последовательно:
QHash<int, QWidget *> hash;
...
QMutableHashIterator<QString, QWidget *> i(hash);
while (i.hasNext()) {
i.next();
qDebug() << i.key() << ": " << i.value();
} Функция next() возвращает следующий элемент в хеше и перемещает итератор вперед. Функции key() и value() возвращают ключ и значение последнего элемента, который был пропущен.
В отличие от итераторов в стиле STL, итераторы в стиле Java указывают между элементами, а не непосредственно на элементы. Первый вызов next() перемещает итератор в позицию между первым и вторым элементом и возвращает первый элемент; второй вызов next() перемещает итератор в позицию между вторым и третьим элементом; и так далее.
Вот как итерироваться по элементам в обратном порядке:
QMutableHashIterator<int, QWidget *> i(hash);
i.toBack();
while (i.hasPrevious()) {
i.previous();
qDebug() << i.key() << ": " << i.value();
} Если вы хотите найти все вхождения определенного значения, используйте findNext() или findPrevious() в цикле. Например:
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();
} В примере удаляются все пары (ключ, значение), где ключ и значение совпадают.
Одновременно может быть активен только один изменяемый итератор для данного хеша. Кроме того, не следует изменять хеш напрямую во время работы итератора (в отличие от изменения через итератор), поскольку это может привести к аннулированию итератора и неопределенному поведению.
См. также QHashIterator и QHash::iterator.
Документация по функциям-членам
void QMutableHashIterator::setValue(const T &value)
Заменяет значение последнего элемента, который был пропущен с помощью одной из функций обхода, на value.
Функции обхода — это next(), previous(), findNext() и findPrevious().
См. также key(), value() и remove().
void QMutableHashIterator::remove()
Удаляет последний элемент, который был пропущен с помощью одной из функций обхода (next(), previous(), findNext(), findPrevious()).
См. также setValue().
bool QMutableHashIterator::findPrevious(const T &value)
Ищет value, начиная с текущей позиции итератора назад. Возвращает true если пара (ключ, значение) со значением value найдена; в противном случае возвращает false.
После вызова, если value был найден, итератор размещается непосредственно перед соответствующим элементом; в противном случае итератор размещается в начале контейнера.
См. также findNext().
bool QMutableHashIterator::findNext(const T &value)
Ищет value, начиная с текущей позиции итератора вперед. Возвращает true если пара (ключ, значение) со значением value найдена; в противном случае возвращает false.
После вызова, если value был найден, итератор размещается непосредственно после соответствующего элемента; в противном случае итератор размещается в конце контейнера.
См. также findPrevious().
const Key &QMutableHashIterator::key() const
Возвращает ключ последнего элемента, который был пропущен с помощью одной из функций обхода (next(), previous(), findNext(), findPrevious()).
После вызова next() или findNext(), key() эквивалентно peekPrevious().key(). После вызова previous() или findPrevious(), key() эквивалентно peekNext().key().
См. также value().
T &QMutableHashIterator::value()
Это перегруженная функция.
Возвращает ссылку на значение последнего элемента, который был пропущен с помощью одной из функций обхода.
const T &QMutableHashIterator::value() const
Возвращает значение последнего элемента, который был пропущен с помощью одной из функций обхода (next(), previous(), findNext(), findPrevious()).
После вызова next() или findNext(), value() эквивалентно peekPrevious().value(). После вызова previous() или findPrevious(), value() эквивалентно peekNext().value().
QMutableHashIterator::Item QMutableHashIterator::peekPrevious() const
Возвращает предыдущий элемент, не перемещая итератор.
Вызовите key() для получения ключа элемента и value() для получения значения.
Вызов этой функции для итератора, расположенного в начале контейнера, приводит к неопределенным результатам.
См. также hasPrevious(), previous() и peekNext().
QMutableHashIterator::Item QMutableHashIterator::previous()
Возвращает предыдущий элемент и перемещает итератор назад на одну позицию.
Вызовите key() для получения ключа элемента и value() для получения значения.
Вызов этой функции для итератора, расположенного в начале контейнера, приводит к неопределенным результатам.
См. также hasPrevious(), peekPrevious() и next().
bool QMutableHashIterator::hasPrevious() const
Возвращает true если за итератором есть хотя бы один элемент, то есть итератор не находится в начале контейнера; в противном случае возвращает false.
См. также hasNext() и previous().
QMutableHashIterator::Item QMutableHashIterator::peekNext() const
Возвращает ссылку на следующий элемент, не перемещая итератор.
Вызовите key() для получения ключа элемента и value() для получения значения.
Вызов этой функции для итератора, расположенного в конце контейнера, приводит к неопределенным результатам.
См. также hasNext(), next() и peekPrevious().
QMutableHashIterator::Item QMutableHashIterator::next()
Возвращает следующий элемент и перемещает итератор на одну позицию вперед.
Вызовите key() для получения ключа элемента и value() для получения значения.
Вызов этой функции для итератора, расположенного в конце контейнера, приводит к неопределенным результатам.
См. также hasNext(), peekNext() и previous().
bool QMutableHashIterator::hasNext() const
Возвращает true если перед итератором есть хотя бы один элемент, то есть итератор не находится в конце контейнера; в противном случае возвращает false.
См. также hasPrevious() и next().
void QMutableHashIterator::toBack()
Перемещает итератор в конец контейнера (после последнего элемента).
См. также toFront() и previous().
void QMutableHashIterator::toFront()
Перемещает итератор в начало контейнера (перед первым элементом).
QMutableHashIterator<Key, T> &QMutableHashIterator::operator=(QHash<Key, T> &container)
Заставляет итератор работать с hash. Итератор устанавливается в начало хэша (перед первым элементом).
См. также toFront() и toBack().
QMutableHashIterator::QMutableHashIterator(QHash<Key, T> &hash)
Создает итератор для обхода hash. Итератор устанавливается в начало хэша (перед первым элементом).
См. также operator=().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.14/qmutablehashiterator.html