QMap使用迭代器iter访问为什么写作iter.key() ,而不是iter->key()
时间: 2024-04-06 17:33:09 浏览: 146
QMap使用迭代器iter访问时,可以使用iter.key()或者iter.value()来获取键值对中的键或值。而iter->key()和iter->value()的写法是针对STL的迭代器的,QMap的迭代器并不是STL迭代器,因此不支持箭头操作符(->)。所以在QMap中,应该使用iter.key()或iter.value()来访问键值对中的键或值。
相关问题
qt5的qmap的函数来获取前一个迭代器
在Qt5的QMap中,可以使用QMap::iterator类的函数来获取前一个迭代器,具体实现方法如下:
```c++
QMap<Key, T>::iterator QMap<Key, T>::previous(QMap<Key, T>::iterator pos)
```
该函数返回参数pos的前一个迭代器,如果不存在前一个迭代器,则返回end()。
例如,以下代码演示了如何使用QMap::previous()函数来获取前一个迭代器:
```c++
QMap<QString, int> map;
map.insert("apple", 1);
map.insert("banana", 2);
map.insert("cherry", 3);
auto iter = map.find("banana");
if (iter != map.end()) {
auto prevIter = map.previous(iter);
if (prevIter != map.end()) {
qDebug() << "Previous key: " << prevIter.key();
qDebug() << "Previous value: " << prevIter.value();
}
}
```
在上述代码中,我们首先在QMap中插入了三个键值对,然后使用QMap::find()函数找到了键为"banana"的迭代器。接着,我们使用QMap::previous()函数获取了该迭代器的前一个迭代器,并打印了其键和值。运行上述代码,输出结果如下:
```
Previous key: apple
Previous value: 1
```
QMap<QString, QString> channel;遍历
你可以使用迭代器来遍历 `QMap<QString, QString>`。
下面是一个示例代码:
```c++
QMap<QString, QString> channel;
channel.insert("BBC", "bbc_news");
channel.insert("CNN", "cnn_news");
channel.insert("FOX", "fox_news");
QMap<QString, QString>::const_iterator iter;
for (iter = channel.constBegin(); iter != channel.constEnd(); ++iter) {
qDebug() << iter.key() << ": " << iter.value();
}
```
输出结果:
```
BBC: bbc_news
CNN: cnn_news
FOX: fox_news
```
在上述示例中,我们使用 `constBegin()` 和 `constEnd()` 函数获取迭代器的起始和结束位置。然后,我们使用迭代器 `iter` 来遍历 `channel` 中的所有键值对。在每次迭代中,我们使用 `iter.key()` 和 `iter.value()` 函数获取当前键值对的键和值,并将它们打印到控制台上。
阅读全文