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
参考资料: