本页内容

QMap::iterator Class

class QMap::iterator

QMap::iterator 类为QMap 提供了STL风格的非const迭代器。更多内容...

公共类型

公共函数

iterator()
const Key &key() const
T &value() const
T &operator*() const
QMap<Key, T>::iterator &operator++()
QMap<Key, T>::iterator operator++(int)
QMap<Key, T>::iterator &operator--()
QMap<Key, T>::iterator operator--(int)
T *operator->() const
bool operator!=(const QMap<Key, T>::iterator &lhs, const QMap<Key, T>::iterator &rhs)
bool operator==(const QMap<Key, T>::iterator &lhs, const QMap<Key, T>::iterator &rhs)

详细说明

QMap<Key, T>::iterator 允许您遍历QMap ,并修改存储在特定键下的值(但不能修改键)。 若要遍历一个 constQMap ,应使用QMap::const_iterator 。通常,对非 constQMap 也应使用QMap::const_iterator ,除非您需要通过迭代器更改QMap 。常量迭代器速度稍快,且能提高代码可读性。

默认的QMap::iterator 构造函数会创建一个未初始化的迭代器。在开始迭代之前,必须使用QMap 函数(如QMap::begin()、QMap::end() 或QMap::find())对其进行初始化。以下是一个典型的循环,用于打印映射中存储的所有 (key, value) 对:

QMap<QString, int> map;
map.insert("January", 1);
map.insert("February", 2);
//...
map.insert("December", 12);

for (auto i = map.cbegin(), end = map.cend(); i != end; ++i)
    cout << qPrintable(i.key()) << ": " << i.value() << endl;

与QHash 不同,后者以任意顺序存储项目,而QMap 则按键值顺序存储项目。

以下是一个示例,将QMap 中存储的每个值加2:

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

要从QMap 中移除元素,可以使用erase_if (QMap<Key, T> &map, Predicate pred):

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

同一个xml-ph-0000@deepl.internal上可以使用多个迭代器。如果向xml-ph-0000@deepl.internal中添加元素,现有的迭代器仍然有效;如果从xml-ph-0000@deepl.internal中移除元素,指向已移除元素的迭代器将变成悬空迭代器。

警告: 隐式共享容器上的迭代器其 行为与 STL 迭代器并不完全相同。应避免在迭代器处于活动状态时复制该容器。更多信息请参阅《隐式共享迭代器问题》。

另请参阅 QMap::const_iterator 、QMap::key_iterator 以及QMap::key_value_iterator 。

成员类型文档

[alias] iterator::iterator_category

std::bidirectional_iterator_tag的同义词,用于表示该迭代器是双向迭代器。

成员函数文档

[default] iterator::iterator()

构建一个未初始化的迭代器。

不得对未初始化的迭代器调用诸如key()、value() 和 operator++() 之类的函数。在使用之前,请使用 operator=() 向其赋值。

另请参阅 QMap::begin() 和QMap::end()。

const Key &iterator::key() const

返回当前项的键作为常量引用。

虽然无法通过迭代器直接修改项的键,但可以通过先调用 `QMap::erase()`,再调用 `QMap::insert()` 来实现。

另请参阅 value()。

T &iterator::value() const

返回指向当前项值的可修改引用。

您可以通过在赋值语句的左侧使用 value() 来更改项的值,例如:

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

另请参阅 ` key()` 和 `operator*()`。

T &iterator::operator*() const

返回指向当前项值的可修改引用。

与value()相同。

另请参阅 key()。

QMap<Key, T>::iterator &iterator::operator++()

前缀++ 运算符(++i )将迭代器向前移动到映射中的下一个元素,并返回指向新当前元素的迭代器。

在QMap::end() 上调用此函数将导致未定义的结果。

另请参阅 operator--()。

QMap<Key, T>::iterator iterator::operator++(int)

后缀运算符++ (i++ )将迭代器向前移动到映射中的下一个元素,并返回指向前一个当前元素的迭代器。

这是一个重载函数。

QMap<Key, T>::iterator &iterator::operator--()

前缀运算符-- (--i )将前一个元素设为当前元素,并返回一个指向新当前元素的迭代器。

在 `QMap::begin()` 上调用此函数将导致未定义的结果。

另请参阅 operator++()。

QMap<Key, T>::iterator iterator::operator--(int)

后缀运算符-- (i-- )将前一个元素设为当前元素,并返回一个指向先前当前元素的迭代器。

这是一个重载函数。

T *iterator::operator->() const

返回指向当前项目值的指针。

另请参阅 value()。

相关的非成员函数

bool operator!=(const QMap<Key, T>::iterator &lhs, const QMap<Key, T>::iterator &rhs)

如果 `lhs ` 指向的对象与迭代器 `rhs ` 指向的对象不同,则返回 `true `;否则返回 `false`。

另请参阅 operator==()。

bool operator==(const QMap<Key, T>::iterator &lhs, const QMap<Key, T>::iterator &rhs)

如果 `lhs ` 指向与迭代器 `rhs ` 相同的项,则返回 `true `;否则返回 `false`。

另请参阅 operator!=()。

© 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.