迭代器类

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>::iteratoroperator++(int)
QMap<Key, T>::iterator &operator--()
QMap<Key, T>::iteratoroperator--(int)
T *operator->() const
booloperator!=(const QMap<Key, T>::iterator &lhs, const QMap<Key, T>::iterator &rhs)
booloperator==(const QMap<Key, T>::iterator &lhs, const QMap<Key, T>::iterator &rhs)

详细说明

QMap<Key, T>::iterator 允许您迭代一个 QMap,可以修改存储在特定键下的值(但不修改键)。如果需要迭代一个 const QMap,应使用 QMap::const_iterator。在非 const QMap 上一般也推荐使用 QMap::const_iterator,除非您需要通过迭代器修改 QMap。常量迭代器略显更快,并且可以提高代码的可读性。

默认的 QMap::iterator 构造函数创建一个未初始化的迭代器。在迭代之前,必须使用类似 QMap::begin()、QMap::end() 或 QMap::find() 的功能进行初始化。下面是一个典型循环的示例,该循环打印存储在映射中的所有(键,值)对。

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 &map, Predicate pred)

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

多迭代器可以在同一个映射中使用。如果您向映射中添加项目,现有迭代器将保持有效。如果您从映射中删除项目,则指向已删除项目的迭代器将成为悬挂迭代器。

警告:隐式共享容器上的迭代器与STL-迭代器不完全一样。您应在容器上的迭代器处于活动状态时避免复制容器。有关更多信息,请参阅隐式共享迭代器问题

另请参阅:QMap::const_iteratorQMap::key_iterator,以及QMap::key_value_iterator

成员类型文档

[别名] iterator::iterator_category

表示这是双向迭代器的std::bidirectional_iterator_tag的同义词。

成员函数文档

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

© 2024 The Qt Company Ltd。本文件中包含的文档贡献是各自所有者的版权。提供的文档受GNU自由文档许可证版本1.3的条例约束,该许可证由自由软件基金会发布。Qt及其各自的标志是The Qt Company Ltd在芬兰和其他国家/地区的商标。所有其他商标均为其各自所有者的财产。