iterator 类
类 QMultiHash::iteratorQMultiHash::iterator 类提供了一个 STL 风格的非常量迭代器用于 QMultiHash。更多...
公共函数
iterator() | |
const Key & | key() const |
T & | value() const |
bool | operator!=(const QMultiHash<Key, T>::iterator &other) const |
bool | operator!=(const QMultiHash<Key, T>::const_iterator &other) const |
T & | operator*() const |
QMultiHash<Key, T>::iterator & | operator++() |
QMultiHash<Key, T>::iterator | operator++(int) |
T * | operator->() const |
bool | operator==(const QMultiHash<Key, T>::iterator &other) const |
bool | operator==(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::begin,QMultiHash::end 或 QMultiHash::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)
同一个散列表上可以同时使用多个迭代器。但请注意,任何对QHash(插入和删除项)的直接修改都可能导致迭代器失效。
将项插入散列表或调用如QHash::reserve()或QHash::squeeze()等方法可能会使指向散列表的所有迭代器失效。只有当QHash不需要增长/收缩其内部散列表时,迭代器才保证有效。在rehashing操作发生后,使用任何迭代器都将导致未定义行为。
如果您需要长时间保留迭代器,我们建议使用QMultiMap而不是QHash。
警告:隐式共享容器上的迭代器与STL迭代器的工作方式并不完全相同。应避免在迭代器处于活动状态时复制容器。有关更多信息,请参阅隐式共享迭代器问题。
另请参阅QMultiHash::const_iterator、QMultiHash::key_iterator和QMultiHash::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";
[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公司及其全球子公司和关联公司在美国及其他国家的商标。所有其他商标均为各自所有者的财产。