C++学习:pair

news/2024/11/28 20:50:47/

pair的定义和结构

在C++中,pair是一个模板类,用于表示一对值的组合。它位于头文件中。pair类的定义如下:

pair类模板有两个模板参数,T1和T2,分别表示第一个值和第二个值的类型。

pair类有两个成员变量,first和second,分别表示第一个值和第二个值。

pair类还有一些成员函数和特性,例如默认构造函数、带参数的构造函数、比较运算符重载等。

使用pair类,你可以方便地将两个值组合在一起,并进行传递、存储和操作。

例如,可以将两个整数组合在一起作为函数的返回值,或者将一对值存储在容器中。

#include <iostream>
#include <utility>
int main(){
std::pair <int, double> p1(1,3.14);
std::pair <char,std::string>p2('a', "hello");
std::cout<< p1.first<<<< p1.second<< std::endl;
std::cout<< p2.first<< p2.second<< std::endl;
return 0;
}

以上代码创建了两个pair对象,分别包含不同类型的值。然后,通过访问first和second成员变量,输出了这些值。

pair的嵌套

pair可以进行嵌套,也就是说可以将一个pair对象作为另一个pair对象的成员。
通过嵌套pair,你可以方便地组合多个值,并形成更复杂的数据结构。
例如,你可以创建一个三维坐标系的点,其中第1个维度由一个整数表示第2、3个维度由一个pair表示。

#include <iostream)
#include <utility>
int main(){
std::pair<int,int> p1(1,2);
std::pair<int,std::pair<int,int>>p2(3,std::make_pair(4,5));
std::pair<std::pair<int,int>,std::pair<int,int>>p3(std::make_pair(6,7),std::make_pair(5,11));
std::cout<< p1.first <<","<< p1.second<< std::endl;
std::cout << p2.first << ","<<p2.second.first<<","<<p2.second.second<< std::endl;
std::cout<<p3.first.first<<","<< p3.second.first<<","<<p3.first.second <<","<< p3.second.second << std::endl;
return 0;
}

pair自带排序规则

pair自带的排序规则是按照first成员进行升序排序。
如果first成员相等,则按照second成员进行升序排序。
这意味着当你使用标准库中的排序算法(如std::sort)对包含pair对象的容器进行排序时,会根据pair对象的first成员进行排序。

下面是一个示例代码,演示了如何使用pai进行排序:

#include <iostream>
#include <utility>
#include <vector>
#include <algorithm>
int main(){
std::vector < std::pair<int, int> > vec;
vec.push_back(std::make_pair(3,2));//可变数组追加数据push_back
vec.push_back(std::make_pair(1,4));//make_pair简单创建std::pair对象的过程
vec.push_back(std::make_pair(2,1));
std::sort(vec.begin(),vec.end());
for(const auto&p:vec){std::cout << p.first <<',' << p.second <<endl;
return 0;
}

在这个示例中,我们创建了一个存储pair对象的向量vec,其中包含三个pair对象。然后,我们使用std::sort函数对vec进行排序。由于pair对象的排序规则是按照first成员进行升序排序,所以排序后的结果:

1 , 4
2 , 1
3 , 2

最后,我们通过遍历vec并输出每个pair对象的成员,验证了排序结果。需要注意的是,如果你想按照其他排序规则对pair进行排序,可以自定义比较函数或使用lambda表达式来传递给排序算法。这样,你可以根据自己的需求定义排序规则。

#include <iostream>
#include <utility>
#include <vector>
// 定义一个结构体,表示一个人的信息
struct Person {std::string name;int age;
};
int main(void){// 创建一个存储Person对象的向量std::vector<Person> people;//添加一些Person对象到向量中people.push_back({ "Alice",25 });people.push_back({ "Bob",30 });people.push_back({ "Charlie",20 });// 创建一个存储pair的向量,每个pair包含一个Person对象和一个评分std::vector<std::pair<Person, int>>scores;// 添加一些pair到向量中scores.push_back({ people[0],90 });scores.push_back({ people[1],85 });scores.push_back({ people[2],95 });// 遍历pair向量,并输出每个人的姓名、年龄和评分for (const auto& pair : scores) {std::cout << "Name:" << pair.first.name << std::endl;std::cout << "Age:" << pair.first.age << std::endl;std::cout << "Score:" << pair.second << std::endl;std::cout << "\n" << std::endl;}return 0;}

http://www.ppmy.cn/news/1353675.html

相关文章

SpringBoot 整合 Redis 全面教程:从配置到使用

Redis 是一种高性能的键值存储数据库&#xff0c;而 Spring Boot 是一个简化了开发过程的 Java 框架。将两者结合&#xff0c;可以轻松地在 Spring Boot 项目中使用 Redis 来实现数据缓存、会话管理和分布式锁等功能。 一、添加 Redis 依赖 在 pom.xml 文件中添加 Redis 相关…

【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱9(附带项目源码)

效果演示 文章目录 效果演示系列目录前言箱子库存源码完结 系列目录 前言 欢迎来到【制作100个Unity游戏】系列&#xff01;本系列将引导您一步步学习如何使用Unity开发各种类型的游戏。在这第25篇中&#xff0c;我们将探索如何用unity制作一个3D背包、库存、制作、快捷栏、存…

【吴恩达·机器学习】第三章:分类任务:逻辑回归模型(交叉熵损失函数、决策边界、过拟合、正则化)

博主简介&#xff1a;努力学习的22级计算机科学与技术本科生一枚&#x1f338;博主主页&#xff1a; Yaoyao2024每日一言&#x1f33c;: 勇敢的人&#xff0c;不是不落泪的人&#xff0c;而是愿意含着泪继续奔跑的人。 ——《朗读者》 0、声明 本系列博客文章是博主本人根据吴…

C/C++如何把指针所指向的指针设为空指针?

实践出真知&#xff0c;指针对于初学的友友来说&#xff0c;头都要大了。喵喵一直遵循在实践中学&#xff0c;在学习中实践&#xff0c;相信你也会有所得&#xff01; 以下是该问题的解决方案&#xff1a; int** ptrPtr new int*; // 创建指向指针的指针 int* ptr new int;…

MATLAB Coder从入门到放弃

一、MATLAB Coder入门 1 MATLAB Coder是什么 从 MATLAB 代码生成 C 和 C 代码 MATLAB Coder™ 可从 MATLAB 代码生成适用于各种硬件平台&#xff08;从桌面计算机系统到嵌入式硬件&#xff09;的 C 和 C 代码。它支持大多数 MATLAB 语言和广泛的工具箱。您可以将生成的代码作…

Python setattr函数

在Python编程中&#xff0c;setattr()函数是一个有用且灵活的内置函数&#xff0c;用于设置对象的属性值。它可以在运行时动态地设置对象的属性&#xff0c;无论是新建对象还是已有对象。本文将深入探讨setattr()函数的用法、语法、示例代码&#xff0c;并探讨其在实际编程中的…

Spring AMQP(3.1.1)设置ConfirmCallback和ReturnsCallback

文章目录 一、起因二、代码1. 定义exchange和queue2. RabbitTemplate3. EnhancedCorrelationData4. 发送消息 环境如下 VersionSpringBoot3.2.1spring-amqp3.1.1RabbitMq3-management 一、起因 老版本的spring-amqp在CorrelationData上设置ConfirmCallback。但是今天却突然发…

洛谷: P1480 A/B Problem

题目描述 输入两个整数 a , b a,b a,b&#xff0c;输出它们的商。 输入格式 两行&#xff0c;第一行是被除数&#xff0c;第二行是除数。 输出格式 一行&#xff0c;商的整数部分。 样例 #1 样例输入 #1 10 2样例输出 #1 5提示 0 ≤ a ≤ 1 0 5000 0\le a\le 10^{500…