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