QPair 類說明
QPair 是一個模板類,用于存儲一對數據項。
頭文件:
cpp
#include <QPair>
qmake 配置:
QT += core
所有成員列表(包括繼承成員)
公共類型
類型定義 | 說明 |
---|---|
first_type | 第一個元素的類型(T1) |
second_type | 第二個元素的類型(T2) |
公共函數
函數 | 說明 |
---|---|
QPair() | 構造一個空對,元素使用默認值初始化 |
QPair(const T1 &value1, const T2 &value2) | 用 value1 和 value2 初始化元素 |
QPair(const QPair<TT1, TT2> &p) | 從另一對 p 構造(Qt 5.2 引入) |
QPair(QPair<TT1, TT2> &&p) | 移動構造函數(Qt 5.2 引入) |
void swap(QPair<T1, T2> &other) | 交換兩對內容(Qt 5.5 引入) |
operator= | 賦值運算符重載 |
公共變量
變量 | 說明 |
---|---|
T1 first | 對中的第一個元素 |
T2 second | 對中的第二個元素 |
相關非成員函數
函數 | 說明 |
---|---|
qMakePair(const T1 &v1, const T2 &v2) | 創建 QPair 的便捷函數 |
swap(QPair<T1, T2> &lhs, QPair<T1, T2> &rhs) | 交換兩對內容 |
比較運算符(==, !=, <, <=, >, >=) | 對比較操作 |
流運算符(<<, >>) | 序列化支持 |
詳細描述
QPair 是一個模板類,用于存儲兩個數據項。當 STL 的 pair 類型不可用時,可以使用 QPair<T1, T2>。它存儲一個 T1 類型的值和一個 T2 類型的值,可用于需要返回兩個值的函數,或作為通用容器的值類型。
示例:
cpp
QPair<QString, double> pair;
pair.first = "pi";
pair.second = M_PI;
注意:對于多個返回值的函數,通常更推薦定義一個小型結構體。結構體可以輕松擴展到多個值,并提供比 first 和 second 更具描述性的成員名稱:
struct Variable {QString name;double value;
};
Variable v;
v.name = "pi";
v.value = M_PI;
隨著 C++11 自動類型推導(auto)的出現,重點從類型名轉移到了函數和成員名稱上。因此,QPair 和 std::pair、std::tuple 一樣,主要用于泛型(模板)代碼中,在這些場景下定義專用類型不可行。
QPair 的模板數據類型(T1 和 T2)必須是可賦值的數據類型。例如,不能存儲 QWidget 作為值,而應該存儲 QWidget*。某些函數有額外要求,這些要求在具體函數文檔中說明。
另請參閱容器類。
成員類型文檔
typedef QPair::first_type
對中第一個元素的類型(T1)。
typedef QPair::second_type
對中第二個元素的類型(T2)。
成員函數文檔
QPair::QPair()
構造一個空對。第一個和第二個元素使用默認構造的值初始化。
QPair::QPair(const T1 &value1, const T2 &value2)
構造一個對,并用 value1 初始化第一個元素,用 value2 初始化第二個元素。
另請參閱 qMakePair()。
QPair::QPair(const QPair<TT1, TT2> &p)
從另一對 p(類型為 TT1 和 TT2)構造一個對。如果 first 不能從 p.first 初始化,或者 second 不能從 p.second 初始化,此構造函數將失敗。
此函數自 Qt 5.2 起引入。
QPair::QPair(QPair<TT1, TT2> &&p)
移動構造函數,使該對實例指向 p 所指向的相同對象。
此函數自 Qt 5.2 起引入。
void QPair::swap(QPair<T1, T2> &other)
交換該對與 other 的內容。
等價于:
qSwap(this->first, other.first);
qSwap(this->second, other.second);
交換重載可以在 std 命名空間中找到,也可以通過參數依賴查找(ADL)在 T 的命名空間中找到。
此函數自 Qt 5.5 起引入。
QPair<T1, T2> &QPair::operator=(const QPair<TT1, TT2> &p)
將 p 復制到該對中。
此函數自 Qt 5.2 起引入。
QPair<T1, T2> &QPair::operator=(QPair<TT1, TT2> &&p)
將 p 移動賦值到該對實例中。
此函數自 Qt 5.2 起引入。
成員變量文檔
T1 QPair::first
對中的第一個元素。
T2 QPair::second
對中的第二個元素。
相關非成員函數
QPair<T1, T2> qMakePair(const T1 &value1, const T2 &value2)
返回包含 value1 和 value2 的 QPair<T1, T2>。示例:
cpp
QList<QPair<int, double>> list;
list.append(qMakePair(66, M_PI));
這等價于 QPair<T1, T2>(value1, value2),但通常需要更少的輸入。
void swap(QPair<T1, T2> &lhs, QPair<T1, T2> &rhs)
重載函數。
交換 lhs 和 rhs 的內容。
此函數自 Qt 5.5 起引入。
bool operator!=(const QPair<T1, T2> &p1, const QPair<T1, T2> &p2)
如果 p1 不等于 p2 則返回 true;否則返回 false。如果兩個對的第一個數據成員不相等或第二個數據成員不相等,則它們比較為不相等。
此函數要求 T1 和 T2 類型實現 operator==()。
bool operator<(const QPair<T1, T2> &p1, const QPair<T1, T2> &p2)
如果 p1 小于 p2 則返回 true;否則返回 false。比較首先在 p1 和 p2 的第一個成員上進行;如果它們相等,則比較第二個成員以打破平局。
此函數要求 T1 和 T2 類型實現 operator<()。
QDataStream &operator<<(QDataStream &out, const QPair<T1, T2> &pair)
將 pair 寫入流 out。
此函數要求 T1 和 T2 類型實現 operator<<()。
另請參閱序列化 Qt 數據類型。
bool operator<=(const QPair<T1, T2> &p1, const QPair<T1, T2> &p2)
如果 p1 小于或等于 p2 則返回 true;否則返回 false。比較首先在 p1 和 p2 的第一個成員上進行;如果它們相等,則比較第二個成員以打破平局。
此函數要求 T1 和 T2 類型實現 operator<()。
bool operator==(const QPair<T1, T2> &p1, const QPair<T1, T2> &p2)
如果 p1 等于 p2 則返回 true;否則返回 false。如果兩個對的第一個數據成員相等且第二個數據成員相等,則它們比較為相等。
此函數要求 T1 和 T2 類型實現 operator==()。
bool operator>(const QPair<T1, T2> &p1, const QPair<T1, T2> &p2)
如果 p1 大于 p2 則返回 true;否則返回 false。比較首先在 p1 和 p2 的第一個成員上進行;如果它們相等,則比較第二個成員以打破平局。
此函數要求 T1 和 T2 類型實現 operator<()。
bool operator>=(const QPair<T1, T2> &p1, const QPair<T1, T2> &p2)
如果 p1 大于或等于 p2 則返回 true;否則返回 false。比較首先在 p1 和 p2 的第一個成員上進行;如果它們相等,則比較第二個成員以打破平局。
此函數要求 T1 和 T2 類型實現 operator<()。
QDataStream &operator>>(QDataStream &in, QPair<T1, T2> &pair)
從流 in 讀取一個對到 pair 中。
此函數要求 T1 和 T2 類型實現 operator>>()。