QMap values遍历,只遍历值,不考虑键

1.概要

QMap<int, QString>::const_iterator i = map.constBegin();

for (const QString &value : map.values()) 

2.内容

在Qt中,QMap 是一个模板类,它提供了一个树状结构的字典,每一个键(key)对应一个值(value)。如果你只想遍历 QMap 中的值,而忽略键,可以使用 QMap 提供的迭代器或者 values() 方法。

以下是几种只遍历 QMap 中值的方法:

方法一:使用迭代器

你可以使用 QMap 的迭代器,但只访问值部分。

QMap<int, QString> map;  
map.insert(1, "one");  
map.insert(2, "two");  
map.insert(3, "three");  
  
QMap<int, QString>::const_iterator i = map.constBegin();  
while (i != map.constEnd()) {  
    qDebug() << i.value();  
    ++i;  
}

方法二:使用 values() 方法

QMap 提供了一个 values() 方法,它返回一个包含所有值的 QList。你可以直接遍历这个 QList

QMap<int, QString> map;  
map.insert(1, "one");  
map.insert(2, "two");  
map.insert(3, "three");  
  
QList<QString> values = map.values();  
for (const QString &value : values) {  
    qDebug() << value;  
}

方法三:使用 Java 风格的迭代器

如果你更喜欢 Java 风格的迭代器,可以使用 QMap::values() 加上 Java 风格的迭代。

QMap<int, QString> map;  
map.insert(1, "one");  
map.insert(2, "two");  
map.insert(3, "three");  
  
for (auto it = map.values().cbegin(); it != map.values().cend(); ++it) {  
    qDebug() << *it;  
}

方法四:使用 C++11 范围循环

如果你使用的是 C++11 或更高版本,可以利用范围循环来简化代码。

QMap<int, QString> map;  
map.insert(1, "one");  
map.insert(2, "two");  
map.insert(3, "three");  
  
for (const QString &value : map.values()) {  
    qDebug() << value;  
}

这些方法都可以有效地遍历 QMap 中的值,而忽略键。选择哪种方法取决于你的具体需求和代码风格偏好。