iterator 类

QMultiHash::iterator

QMultiHash::iterator 类提供了一个 STL 风格的非常量迭代器用于 QMultiHash。更多...

公共函数

iterator()
const Key &key() const
T &value() const
booloperator!=(const QMultiHash<Key, T>::iterator &other) const
booloperator!=(const QMultiHash<Key, T>::const_iterator &other) const
T &operator*() const
QMultiHash<Key, T>::iterator &operator++()
QMultiHash<Key, T>::iteratoroperator++(int)
T *operator->() const
booloperator==(const QMultiHash<Key, T>::iterator &other) const
booloperator==(const QMultiHash<Key, T>::const_iterator &other) const

详细描述

QMultiHash<Key, T>::iterator 允许您遍历 QMultiHash 并修改与特定键关联的值(但不是键)。如果您要遍历一个常量 QMultiHash,则应使用 QMultiHash::const_iterator。在非常量 QMultiHash 上使用 QMultiHash::const_iterator 通常是一个好习惯,除非您需要通过迭代器更改 QMultiHash。常量迭代器略快,可以提高代码的可读性。

默认的 QMultiHash::iterator 构造函数创建一个未初始化的迭代器。在您开始迭代之前,必须使用 QMultiHash 函数(如 QMultiHash::beginQMultiHash::endQMultiHash::find)来初始化它。下面是一个打印存储在散列中的所有(键,值)对的标准循环示例

QHash<QString, int> hash;
hash.insert("January", 1);
hash.insert("February", 2);
...
hash.insert("December", 12);

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

与按键排序其项的 QMap 不同,QMultiHash 按任意顺序存储其项。

以下是一个示例,它将存储在 QMultiHash 中的每个值增加 2

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

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

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

同一个散列表上可以同时使用多个迭代器。但请注意,任何对QHash(插入和删除项)的直接修改都可能导致迭代器失效。

将项插入散列表或调用如QHash::reserve()或QHash::squeeze()等方法可能会使指向散列表的所有迭代器失效。只有当QHash不需要增长/收缩其内部散列表时,迭代器才保证有效。在rehashing操作发生后,使用任何迭代器都将导致未定义行为。

如果您需要长时间保留迭代器,我们建议使用QMultiMap而不是QHash

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

另请参阅QMultiHash::const_iteratorQMultiHash::key_iteratorQMultiHash::key_value_iterator

成员函数文档

[noexcept] bool iterator::operator==(const QMultiHash<Key, T>::const_iterator &other) const

[noexcept] bool iterator::operator==(const QMultiHash<Key, T>::iterator &other) const

如果other指向的项与该迭代器指向的相同,则返回true;否则返回false

另请参阅运算符!=()。

[noexcept] bool iterator::operator!=(const QMultiHash<Key, T>::const_iterator &other) const

[noexcept] bool iterator::operator!=(const QMultiHash<Key, T>::iterator &other) const

如果other指向的项与该迭代器指向的不同,则返回true;否则返回false

另请参阅运算符==()。

[constexpr noexcept] iterator::iterator()

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

在未初始化的迭代器上不能调用如key()、value()和operator++()等函数。在使用之前,请使用operator=()给它赋值。

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

[noexcept] const Key &iterator::key() const

返回当前项的密钥作为const引用。

虽然没有直接更改项密钥的方法,但可以通过调用QMultiHash::erase()然后调用QMultiHash::insert来实现。

另请参阅value()。

[noexcept] T &iterator::value() const

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

您可以通过将value()用在赋值表达式左边来改变项的值,例如

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

另请参阅key() 和 操作符*

[noexcept] T &iterator::operator*() const

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

value 相同。

另请参阅key

[noexcept] QMultiHash<Key, T>::iterator &iterator::operator++()

前缀 ++ 操作符 (++i) 将迭代器移动到哈希中的下一个项,并返回对新当前项的迭代器。

QMultiHash::end() 上调用此函数会导致未定义的结果。

[noexcept] QMultiHash<Key, T>::iterator iterator::operator++(int)

这是一个重载函数。

后缀 ++ 操作符 (i++) 将迭代器移动到哈希中的下一个项,并返回对先前当前项的迭代器。

[noexcept] T *iterator::operator->() const

返回当前项值的指针。

另请参阅value()。

© 2024 Qt公司。所提供的文档贡献属于其各自所有者的版权。本处的文档根据自由软件基金会发布的版本 1.3 的 GNU自由文档许可证 条款许可。Qt及其相关标识是芬兰的Qt公司及其全球子公司和关联公司在美国及其他国家的商标。所有其他商标均为各自所有者的财产。