迭代器类

QMultiMap::iterator

QMultiMap::iterator 类提供了一个 STL 风格的非 const 迭代器,用于 QMultiMap。了解更多...

公共类型

公共函数

iterator()
const Key &key() const
T &value() const
T &operator*() const
QMultiMap::iterator &operator++()
QMultiMap::iteratoroperator++(int)
QMultiMap::iterator &operator--()
QMultiMap::iteratoroperator--(int)
T *operator->() const
booloperator!=(const QMultiMap::iterator &lhs, const QMultiMap::iterator &rhs)
booloperator==(const QMultiMap::iterator &lhs, const QMultiMap::iterator &rhs)

详细信息

QMultiMap::iterator 允许您遍历一个 QMultiMap 并修改特定键下存储的值(但不能修改键)。如果您想遍历一个 const QMultiMap,您应该使用 QMultiMap::const_iterator。通常,在非 const QMultiMap 上使用 QMultiMap::const_iterator 也是好的做法,除非您需要通过迭代器更改 QMultiMap。常量迭代器略快,可以提高代码的可读性。

默认的 QMultiMap::iterator 构造函数创建了一个未初始化的迭代器。您必须在开始迭代之前使用例如 QMultiMap::begin()、QMultiMap::endQMultiMap::find() 这样的 QMultiMap 函数来初始化它。以下是一个典型的循环,打印出在映射中存储的所有(键,值)对

与存储项顺序任意的 QMultiHash 不同,QMultiMap 按键的顺序存储其项。具有相同键的项将连续出现,从最近插入的值到最久插入的值。

以下是一个例子,将 QMultiMap 中存储的所有值增加 2

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

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

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

可以在同一张映射中多次使用迭代器。如果你向映射中添加项目,现有的迭代器将保持有效。如果你从映射中删除项目,指向已删除项目的迭代器将变为悬空迭代器。

警告:隐式共享容器上的迭代器并不完全像 STL 迭代器那样工作。应避免在迭代器活动期间复制容器。有关更多信息,请参阅隐式共享迭代器问题

另请参阅:QMultiMap::const_iteratorQMultiMap::key_iteratorQMultiMap::key_value_iterator

成员类型文档

[代称] iterator::iterator_category

std::bidirectional_iterator_tag的同义词,表示此迭代器是一个双向迭代器。

成员函数文档

iterator::iterator()

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

不要在未初始化的迭代器上调用key()、value和operator++()等函数。在使用它之前,使用operator=()为其分配一个值。

另请参阅:QMultiMap::begin()和QMultiMap::end

const Key &iterator::key() const

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

没有直接通过迭代器更改项的键的方法,尽管可以通过调用QMultiMap::erase()后再调用QMultiMap::insert()来实现。

另请参阅:value

T &iterator::value() const

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

您可以通过在赋值表达式的左侧使用value()更改项的值,例如:

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

另请参阅:key()和operator*

T &iterator::operator*() const

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

value相同。

另请参阅:key

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

前缀++运算符(++i)将迭代器移动到多映射中的下一个项,并返回对新当前位置的迭代器。

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

另请参阅:operator--

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

这是一个重载的函数。

后缀++运算符(i++)将迭代器移动到多映射中的下一个项,并返回对先前当前位置的迭代器。

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

前缀 -- 运算符(--i)使前一个项成为当前项,并返回一个指向新的当前项的迭代器。

QMultiMap::begin() 上调用此函数将产生未定义的结果。

参见运算符++

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

这是一个重载的函数。

后缀 -- 运算符(i--)使前一个项成为当前项,并返回一个指向先前当前项的迭代器。

T *iterator::operator->() const

返回当前项值的指针。

另请参阅:value

相关非成员

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

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

参见运算符!=

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

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

参见运算符==

© 2024 Qt 公司。本文档中的文献贡献属于各自的版权所有者。本文档受 GNU 自由文档许可证第 1.3 版 的许可,该许可证由自由软件基金会发布。Qt 及其相应徽标是芬兰的 Qt 公司或其他国家和地区注册的商标。所有其他商标均为各自所有者的财产。