QPair 类说明

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

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


网站公告

今日签到

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