Класс QMutableHashIterator
Класс QMutableHashIterator предоставляет итератор в стиле Java для QHash и QMultiHash, не являющийся константным. Подробнее...
| Заголовок: | #include <QMutableHashIterator> |
| qmake: | QT += core |
Открытые функции
| QMutableHashIterator(QHash<Key, T> &hash) | |
| 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() |
| QMutableHashIterator<Key, T> & | operator=(QHash<Key, T> &container) |
Подробное описание
Класс QMutableHashIterator предоставляет итератор в стиле Java для QHash и QMultiHash, не являющийся константным.
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.12/qmutablehashiterator.html