功能解释
QList<T> QMap::values() const
Returns a list containing all the values in the map, in ascending order of their keys. If a key is associated with multiple values, all of its values will be in the list, and not just the most recently inserted one.
See also keys() and value().
QList<T> QMap::values() const
是 QMap
类的一个成员函数,其作用是返回一个包含 QMap
中所有值的列表。这里的 T
代表 QMap
中存储的值的类型。
该函数会按照键的升序排列来收集所有的值。如果一个键关联了多个值(在某些特殊的多值映射场景下),那么这个键对应的所有值都会被包含在返回的列表中,而不仅仅是最近插入的那个值。
此外,文档还提到了可以参考 keys()
函数(用于返回 QMap
中所有键的列表)和 value()
函数(用于根据键获取对应的值)。
代码使用案例
以下是一个使用 QMap
和 values()
函数的详细示例代码:
#include <QCoreApplication>
#include <QMap>
#include <QList>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// 创建一个 QMap,键为 QString 类型,值为 int 类型
QMap<QString, int> myMap;
// 向 QMap 中插入一些键值对
myMap.insert("apple", 10);
myMap.insert("banana", 20);
myMap.insert("cherry", 30);
// 调用 values() 函数获取包含所有值的列表
QList<int> valueList = myMap.values();
// 输出获取到的值列表
qDebug() << "Values in the map:";
for (int value : valueList) {
qDebug() << value;
}
return a.exec();
}
代码解释
包含必要的头文件:
QCoreApplication
:用于创建 Qt 应用程序的核心对象。QMap
:提供了关联数组(键值对)的功能。QList
:用于存储值的列表。QDebug
:用于在控制台输出调试信息。
创建
QMap
并插入键值对:QMap<QString, int> myMap;
:创建一个QMap
对象,键的类型为QString
,值的类型为int
。myMap.insert("apple", 10);
等语句:向QMap
中插入不同的键值对。
调用
values()
函数:QList<int> valueList = myMap.values();
:调用values()
函数获取QMap
中所有值的列表,并将其存储在valueList
中。
遍历并输出值列表:
- 使用范围 for 循环遍历
valueList
,并使用qDebug()
输出每个值。
- 使用范围 for 循环遍历
注意事项
values()
函数是一个常量成员函数,意味着它不会修改QMap
的内容。- 返回的列表中值的顺序是按照键的升序排列的。在这个例子中,由于键是字符串,它们会按照字典序排列。
代码例子参考
所以能修改Map的值的代码如下:
#include <QString>
#include <QDebug>
// 定义 User 类
class User {
public:
// 构造函数,用于初始化用户信息
User(const QString& name = "", int age = 0) : m_name(name), m_age(age) {}
// 获取用户姓名
QString getName() const {
return m_name;
}
// 设置用户姓名
void setName(const QString& name) {
m_name = name;
}
// 获取用户年龄
int getAge() const {
return m_age;
}
// 设置用户年龄
void setAge(int age) {
m_age = age;
}
private:
QString m_name;
int m_age;
};
#include <QMap>
#include <QString>
#include <QDebug>
// 上面定义的 User 类代码放在这里
int main() {
// 创建一个 QMap<QString, User> 对象
QMap<QString, User> userMap;
// 向 map 中插入元素
userMap.insert("user1", User("Alice", 25));
userMap.insert("user2", User("Bob", 30));
userMap.insert("user3", User("Charlie", 35));
// 输出修改前的信息
qDebug() << "修改前的信息:";
for (const auto& key : userMap.keys()) {
const User& user = userMap.value(key);
qDebug() << "Key:" << key << ", Name:" << user.getName() << ", Age:" << user.getAge();
}
// 使用迭代器遍历 QMap 并修改 Value 的值
for (auto it = userMap.begin(); it != userMap.end(); ++it) {
// 修改用户的年龄,每个用户年龄加 1
User& user = it.value();
user.setAge(user.getAge() + 1);
// 修改用户的姓名,在原姓名后添加 "_new"
user.setName(user.getName() + "_new");
}
// 输出修改后的信息
qDebug() << "\n修改后的信息:";
for (const auto& key : userMap.keys()) {
const User& user = userMap.value(key);
qDebug() << "Key:" << key << ", Name:" << user.getName() << ", Age:" << user.getAge();
}
return 0;
}
#include <QMap>
#include <QString>
#include <QDebug>
// User 类定义放在这里
int main() {
// 创建一个 QMap<QString, User> 对象
QMap<QString, User> userMap;
// 向 map 中插入元素
userMap.insert("user1", User("Alice", 25));
userMap.insert("user2", User("Bob", 30));
userMap.insert("user3", User("Charlie", 35));
// 使用迭代器遍历 QMap
// 方法一:使用 QMap::iterator(非 const 迭代器)
qDebug() << "使用 QMap::iterator 遍历:";
for (QMap<QString, User>::iterator it = userMap.begin(); it != userMap.end(); ++it) {
const QString& key = it.key();
const User& user = it.value();
qDebug() << "Key:" << key << ", Name:" << user.getName() << ", Age:" << user.getAge();
}
// 方法二:使用 QMap::const_iterator(const 迭代器)
qDebug() << "\n使用 QMap::const_iterator 遍历:";
for (QMap<QString, User>::const_iterator cit = userMap.constBegin(); cit != userMap.constEnd(); ++cit) {
const QString& key = cit.key();
const User& user = cit.value();
qDebug() << "Key:" << key << ", Name:" << user.getName() << ", Age:" << user.getAge();
}
// 方法三:使用范围-based for 循环(C++11 及以上)
qDebug() << "\n使用范围-based for 循环遍历:";
for (const auto& pair : userMap) {
const QString& key = pair.first;
const User& user = pair.second;
qDebug() << "Key:" << key << ", Name:" << user.getName() << ", Age:" << user.getAge();
}
return 0;
}
void RecalculateVoltage()
{
QMutexLocker locker(&m_lock);
QMap<QString, TEST_DATA>::iterator it;
for (it = m_mapPath2Data.begin(); it != m_mapPath2Data.end(); ++it)
{
TEST_DATA& stTestData = it.value();
//...
}
}