Qt5 C++ QMap使用总结

发布于:2025-03-06 ⋅ 阅读:(16) ⋅ 点赞:(0)

功能解释

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() constQMap 类的一个成员函数,其作用是返回一个包含 QMap 中所有值的列表。这里的 T 代表 QMap 中存储的值的类型。

该函数会按照键的升序排列来收集所有的值。如果一个键关联了多个值(在某些特殊的多值映射场景下),那么这个键对应的所有值都会被包含在返回的列表中,而不仅仅是最近插入的那个值。

此外,文档还提到了可以参考 keys() 函数(用于返回 QMap 中所有键的列表)和 value() 函数(用于根据键获取对应的值)。

代码使用案例

以下是一个使用 QMapvalues() 函数的详细示例代码:

#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();
}

代码解释

  1. 包含必要的头文件

    • QCoreApplication:用于创建 Qt 应用程序的核心对象。
    • QMap:提供了关联数组(键值对)的功能。
    • QList:用于存储值的列表。
    • QDebug:用于在控制台输出调试信息。
  2. 创建 QMap 并插入键值对

    • QMap<QString, int> myMap;:创建一个 QMap 对象,键的类型为 QString,值的类型为 int
    • myMap.insert("apple", 10); 等语句:向 QMap 中插入不同的键值对。
  3. 调用 values() 函数

    • QList<int> valueList = myMap.values();:调用 values() 函数获取 QMap 中所有值的列表,并将其存储在 valueList 中。
  4. 遍历并输出值列表

    • 使用范围 for 循环遍历 valueList,并使用 qDebug() 输出每个值。

注意事项

  • 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();
		//...
	}
}

网站公告

今日签到

点亮在社区的每一天
去签到