QPair的介绍及用法

QPair是一个模板类,它存储一对值(key,value),可以是不同的数据类型。QPair的用法有以下几个方面:

  • QPair的构造函数有以下几种形式:

    • QPair():默认构造函数,创建一个空的QPair对象。
    • QPair(QPair<TT1, TT2> &&p):移动构造函数,从另一个QPair对象p移动数据到当前对象。
    • QPair(const QPair<TT1, TT2> &p):拷贝构造函数,从另一个QPair对象p复制数据到当前对象。
    • QPair(const T1 &value1, const T2 &value2):创建一个QPair对象,其中first为value1,second为value2。

    例如:

    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的常用接口有以下几种:

    • first和second:分别表示QPair对象中的第一个值和第二个值,可以直接访问和修改。
    • qMakePair(const T1 &value1, const T2 &value2):创建一个QPair对象,其中first为value1,second为value2,等同于QPair(value1, value2)。
    • swap(QPair<T1, T2> &other):交换当前对象和另一个QPair对象other的数据。
    • operator=、operator==、operator!=、operator<、operator<=、operator>、operator>=:分别表示赋值、相等、不等、小于、小于等于、大于、大于等于操作,注意先比较first,如果相同则再比较second。
    • operator>>和operator<<:分别表示从数据流中读取和写入QPair对象,注意需要对T1和T2实现重载>>和<<。

    例如:

    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的常见用法有以下几种:

    • 作为函数的返回值,可以返回两个相关的值,而不需要定义一个结构体或类。
    • 作为容器的元素,可以存储键值对,例如QMap、QHash、QList等。
    • 作为算法的参数,可以传递两个相关的值,例如qSort、qStableSort等。

    例如:

    // 定义一个函数,返回两个整数的最大公约数和最小公倍数
    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
    

参考资料:

  • QPair使用
  • QPair 的用法
  • C++ pair的基本用法总结(整理)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/149116.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode2937. 使三个字符串相等

Every day a Leetcode 题目来源&#xff1a;2937. 使三个字符串相等 解法1&#xff1a;枚举 设 len1、len2、len3 分别为字符串 s1、s2、s3 的长度。 min_len 是 3 个字符串长度的最小值。 枚举 len min_len 到 len 1&#xff0c;设 t1、t2、t3 分别是字符串 s1、s2、s…

全链路监控--pinpoint

一、pinpoint架构原理 架构组成 Pinpoint Agent:和自己运行的应用关联起来的探针 Pinpoint Collector:收集各种性能数据 Pinpoint-Web: 将收集到的数据显成为 WEB网页显示 HBase Storage: 存储收集到的数据 工作原理 pinpoint的核心思想是在各个服务节点之间彼此调用时&a…

flask创建步骤

1.在__init__.py中创建db对象 from flask_sqlalchemy import SQLAlchemy db SQLAlchemy()2.同样的在__init__.py中create_app函数中让app传入到db中 def create_app():app Flask(__name__)app.config.from_object(settings.DevelopmentConfig)app.register_blueprint(ac)ap…

Unity 6 是下一个 LTS 版本即将发布

Unity 公司宣布&#xff0c;即将发布 Unity 6&#xff0c;并表示其为下一个长期支持版本 (LTS)。 Unity 在大会上演示了全新的 Unity 6引擎&#xff0c;并通过 Syncy Studios 采用 Unity 6 制作的《幻想王国&#xff08;Fantasy Kingdom&#xff09;》Demo 进行了演示&#xff…

面试题 三

一、this 手写call //1、定义myCall方法 //3、接收剩余参数并返回结果 Function.prototype.myCall function (thisArg, ...arg) {// console.log(thisArg); //person对象// console.log(this); //func方法//2、设置this并调用原函数//下面三行代码有个缺陷就是如果pers…

JS算法练习 11.20

leetcode 2629 复合函数 请你编写一个函数&#xff0c;它接收一个函数数组 [f1, f2, f3&#xff0c;…&#xff0c; fn] &#xff0c;并返回一个新的函数 fn &#xff0c;它是函数数组的 复合函数 。 [f(x)&#xff0c; g(x)&#xff0c; h(x)] 的 复合函数 为 fn(x) f(g(h(…

「Verilog学习笔记」边沿检测

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 timescale 1ns/1ns module edge_detect(input clk,input rst_n,input a,output reg rise,output reg down );reg a_tem ; always (posedge clk or negedge rst_n) beginif…

Spark作业串行与并行提交job

在Scala中&#xff0c;您可以以串行和并行的方式提交Spark作业。看看如何使用for和par.foreach构造对应的例子。 串行Spark作业&#xff08;使用for&#xff09; // 串行Spark作业设置 for (tag <- tags) {spark.sparkContext.setJobGroup(tag.toString, s"Tag: $tag…

分布式原理

目录 1. 分布式原理1.1. 关系型数据库遵循 ACID 规则1.2. 分布式系统1.2.1. 分布式计算的优点1.2.2. 分布式计算的缺点 1.3. CAP 定理 (CAP theorem)1.4. BASE1.5. ACID vs BASE 1. 分布式原理 1.1. 关系型数据库遵循 ACID 规则 事务在英文中是 transaction, 和现实世界中的交…

我的256天创作纪念日

今天是我成为创作者的第256天纪念日&#xff0c;感谢CSDN官方的纪念信让我铭记这特殊的一天。 机缘 256天前&#xff0c;我怀着满满的好奇和期待&#xff0c;开始了我在CSDN的创作之旅。当时的我&#xff0c;是一个内向的计算机小白&#xff0c;对于写博客这件事还一无所知。…

Windows10 MYSQL Installer 安装(mysql-installer-community-5.7.19.0.msi)

分类 编程技术 1.进入官网找到自己所需的安装包&#xff1a;https://dev.mysql.com/ &#xff0c;路径&#xff1a;DOWNLOAD-->MYSQL Community Edition(GRL)-->MYSQL on Windows (Installer & Tool) 或直接点击 MySQL :: Download MySQL Installer 查看最新版本。…

uniapp+vue+Springboot 公司网站0~1搭建 前端前期设计篇

原型图 client https://www.xiaopiu.com/h5/byId?typeproject&id653bc791940bbb14e4feeecf admin 客户端 apph5 页面 首页展示 经典用户案例轮播图设计师轮播图 经典用户案例 经典案例搜索详情经典案例详情 设计师查询&#xff08;待定&#xff09; 后台管理 ​ …

bhosts 显示节点 “unreach“ 状态

4.1、bhosts简单使用 查看各节点情况&#xff0c;包括状态和正在运行的 Job 情况等 STATUS列展示节点状态 OK&#xff1a;可用——可接受新的作业的正常状态 unavail&#xff1a;不可用 可能原因&#xff1a;主机关闭&#xff0c;LIM和sbatchd不可达 unreach&#xff1a;无法连…

【笔记1-2】Qt系列:QkeyEvent 键盘事件 设定快捷键

参考文献 QKeyEvent 类用来描述一个键盘事件。当键盘按键被按下或者被释放时&#xff0c;键盘事件便会被发送给拥有键盘输人焦点的部件。QKeyEvent 的 key() 函数可以获取具体的按键关键字。需要特别说明的是&#xff0c;回车键在这里是 Qt::Key_Return&#xff1b;键盘上的一…

《LeetCode力扣练习》代码随想录——链表(链表相交---Java)

《LeetCode力扣练习》代码随想录——链表&#xff08;链表相交—Java&#xff09; 刷题思路来源于 代码随想录 面试题 02.07. 链表相交 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) {* …

基于SpringBoot的SSMP整合案例(业务层基础开发与快速开发)

业务层基础开发 接口类public interface BookService {boolean save(Book book);boolean update(Book book);boolean delete(Integer id);Book getById(Integer id);List<Book> getAll();IPage<Book> getByPage(int currentPage,int pageSize);IPage<Book> …

ARTS 打卡第一周

ARTS AlgorithmReviewTipShare Algorithm 题目 class Solution {func mergeAlternately(_ word1: String, _ word2: String) -> String {var ans ""var idx1 word1.startIndexvar inx2 word2.startIndexwhile idx1 < word1.endIndex || idx2 < word2.e…

【随想】每日两题Day.17

题目&#xff1a;232. 用栈实现队列 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作&#xff08;push、pop、peek、empty&#xff09;&#xff1a; 实现 MyQueue 类&#xff1a; void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移…

Linux | C语言中volatile关键字的理解

目录 前言 一、代码引入 二、现象解释 三、具体引用 前言 本章主要讲解介绍volatile关键的作用与使用场合&#xff1b;深刻理解volatile关键字&#xff1b;本文你需要有信号相关的基础知识&#xff1b; Linux | 信号-CSDN博客 一、代码引入 首先&#xff0c;我们来查看下面…

upgrade k8s (by quqi99)

作者&#xff1a;张华 发表于&#xff1a;2023-11-17 版权声明&#xff1a;可以任意转载&#xff0c;转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明(http://blog.csdn.net/quqi99) 本文只是从网上搜索一些升级k8s的理论学习&#xff0c;下面的步骤未实际测…