文章目錄
- 功能解釋
- 代碼使用案例
- 代碼解釋
- 注意事項
- 代碼例子參考
功能解釋
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) {// 修改用戶的年齡,每個用戶年齡加 1User& 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();//...}
}