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>>()。