QPair是一个模板类,它存储一对值(key,value),可以是不同的数据类型。QPair的用法有以下几个方面:
QPair的构造函数有以下几种形式:
例如:
QPair<int, QString> p1; // 创建一个空的QPair对象
QPair<int, QString> p2(1, "Hello"); // 创建一个QPair对象,其中first为1,second为"Hello"
QPair<int, QString> p3(p2); // 创建一个QPair对象,从p2复制数据
QPair<int, QString> p4(std::move(p2)); // 创建一个QPair对象,从p2移动数据
QPair的常用接口有以下几种:
例如:
QPair<int, QString> p1(1, "Hello");
QPair<int, QString> p2 = qMakePair(2, "World"); // 等同于QPair<int, QString> p2(2, "World");
p1.first = 3; // 修改p1的第一个值为3
p1.second = "Qt"; // 修改p1的第二个值为"Qt"
p1.swap(p2); // 交换p1和p2的数据
bool b1 = (p1 == p2); // 判断p1和p2是否相等,即first和second都相等
bool b2 = (p1 < p2); // 判断p1是否小于p2,即先比较first,如果相同则再比较second
QDataStream ds;
ds << p1; // 将p1写入数据流
ds >> p2; // 从数据流中读取p2
QPair的常见用法有以下几种:
例如:
// 定义一个函数,返回两个整数的最大公约数和最小公倍数
QPair<int, int> gcdAndLcm(int a, int b) {
int gcd = 1; // 最大公约数
int lcm = a * b; // 最小公倍数
for (int i = 2; i <= qMin(a, b); i++) {
if (a % i == 0 && b % i == 0) {
gcd = i; // 更新最大公约数
lcm = lcm / i; // 更新最小公倍数
}
}
return QPair<int, int>(gcd, lcm); // 返回一对值
}
// 定义一个结构体,表示学生的姓名和成绩
struct Student {
QString name;
int score;
};
// 定义一个比较函数,按照成绩降序排序,如果成绩相同则按照姓名升序排序
bool compare(const Student &s1, const Student &s2) {
return qMakePair(-s1.score, s1.name) < qMakePair(-s2.score, s2.name);
}
int main() {
// 调用函数,获取两个整数的最大公约数和最小公倍数
QPair<int, int> result = gcdAndLcm(12, 18);
qDebug() << "GCD:" << result.first << "LCM:" << result.second;
// 创建一个QMap容器,存储国家和首都的对应关系
QMap<QString, QString> countries;
countries.insert("China", "Beijing");
countries.insert("Japan", "Tokyo");
countries.insert("USA", "Washington");
// 遍历QMap容器,输出每个QPair元素
for (QPair<QString, QString> pair : countries) {
qDebug() << pair.first << "->" << pair.second;
}
// 创建一个QList容器,存储学生的姓名和成绩
QList<Student> students;
students.append({"Alice", 90});
students.append({"Bob", 85});
students.append({"Cindy", 95});
students.append({"David", 85});
// 使用qSort算法,按照比较函数排序
qSort(students.begin(), students.end(), compare);
// 遍历QList容器,输出每个学生的信息
for (Student s : students) {
qDebug() << s.name << s.score;
}
return 0;
}
输出:
GCD: 6 LCM: 36
China -> Beijing
Japan -> Tokyo
USA -> Washington
Cindy 95
Alice 90
Bob 85
David 85
参考资料:
更多【java-QPair的介绍及用法】相关视频教程:www.yxfzedu.com