C++——pair用法总结
创始人
2024-01-25 04:50:25

C++——pair用法总结

  • 1.pair概述(在标头 定义)
  • 2.pair使用
    • 2.1成员函数(构造函数、赋值函数)
    • 2.2非成员函数
  • 2.3辅助类
  • 使用

1.pair概述(在标头 定义)

std::pair 是类模板,提供在一个单元存储两个相异类型对象的途径。简单描述,即pair可以将2个数据组合为一个数据,当然pair的返回值也可以是2个数据。

template struct pair;
其中,T1是first_type,T2是second_type。

有关pair的描述,具体见下:

描述成员1(T1)成员2(T2)
成员类型first_typesecond_type
成员名firstsecond

2.pair使用

2.1成员函数(构造函数、赋值函数)

构造函数描述
pair();默认构造函数。值初始化 pair 的两个元素 first 和 second。
pair( const T1& x, const T2& y );②以 x 初始化 first 并以 y 初始化 second。
template< class U1, class U2 >pair( U1&& x, U2&& y );以 std::forward(x) 初始化 first 并以 std::forward(y) 初始化 second。
template< class U1, class U2 >constexpr pair( pair& p );③以 p.first 初始化 first 并以 p.second 初始化 second。
template< class U1, class U2 >pair( const pair& p );以 p.first 初始化 first 并以 p.second 初始化 second。
template< class U1, class U2 >pair( pair&& p );以std::forward(p.first) 初始化 first 并以 std::forward(p.second) 初始化 second。
template< class U1, class U2 >constexpr pair( const pair&& p );以 std::forward(p.first) 初始化 first 并以 std::forward(p.second) 初始化 second。
pair& operator=( const pair& other );④复制赋值运算符。以 other 内容的副本替换内容。
template< class U1, class U2 >pair& operator=( const pair& other );⑤赋值 other.first 给 first , other.second 给 second 。
pair& operator=( pair&& other );⑥移动赋值运算符。用移动语义以 other 的内容替换内容。
template< class U1, class U2 >pair& operator=( pair&& other );⑦赋值 std::forward(p.first) 给 first , std::forward(p.second) 给 second 。
|
#include 
#include 
#include using namespace std;int main()
{pair p1;//①默认构造函数cout << "p1.first: " << p1.first << "   p1.second : " << p1.second << endl;pair p2{ 1,3 };//②以1初始化first并以3初始化 secondcout << "p2.first: " << p2.first << "   p2.second : " << p2.second << endl;pair p3{ p2 };//③以p.first初始化first并以p.second初始化second。cout << "p3.first: " << p3.first << "   p3.second : " << p3.second << endl;pair p4{ 3,"Hello World" };p1 = p4;//④复制赋值运算符。以 other 内容的副本替换内容。cout << "p1.first: " << p1.first << "   p1.second : " << p1.second << endl;pair> p5{ 1,{1,3,5} }, p6{ 2,{2,4,6} };p5 = move(p6);//⑦operator=( pair&& other );cout << "p5.first: " << p5.first  << endl;cout << "p6.first: " << p6.first << endl;return 0;
}

在这里插入图片描述

2.2非成员函数

非成员函数描述
template< class T1, class T2 >std::pair make_pair( T1 t, T2 u );构造 std::pair 对象,从参数类型推导目标类型。
template< class T1, class T2 >bool operator==( const std::pair& lhs, const std::pair& rhs );若 lhs.first = rhs.first 且 lhs.second = rhs.second 则为 true ,否则为 false
template< class T1, class T2 >bool operator!=( const std::pair& lhs, const std::pair& rhs );!(lhs == rhs)
template< class T1, class T2 >bool operator<( const std::pair& lhs, const std::pair& rhs );按字典序比较 lhs 和 rhs ,即比较首元素,然后仅若它们等价,再比较第二元素。若 lhs.firstrhs.first 则返回 false 。否则,若 lhs.second
template< class T1, class T2 >bool operator>( const std::pair& lhs, const std::pair& rhs );rhs < lhs
template< class T1, class T2 >bool operator>=( const std::pair& lhs, const std::pair& rhs );!(lhs < rhs)
template< class T1, class T2 >void swap( std::pair& x, std::pair& y )交换 x 与 y 的内容。等价于 x.swap(y) 。
template constexpr T& get(std::pair& p) ;返回到 p.first 的引用。
template constexpr const T&& get(const std::pair&& p) noexcept;返回到 p.second 的引用。
template< std::size_t I, class T1, class T2 >constexpr std::tuple_element_t >& get( std::pair& p )若 I0 则返回到 p.first 的引用,若 I1 则返回到 p.second 的引用。
#include 
#include using namespace std;int main()
{pair p1;//①默认构造函数p1 = make_pair( 1,"Hello" );cout << "p1.first: " << p1.first << "   p1.second : " << p1.second << endl;return 0;
}

在这里插入图片描述

#include 
#include 
#include using namespace std;int main()
{pair p1{ 1,3 };pair p2{ 1,3 };pair p3{ 2,3 };pair p4{ 0,3 };pair p5{ 0,0 };pair p6{ 2,3 };cout << (p1 == p2) << endl;cout << (p1 < p3) << endl;cout << (p1 > p2) << endl;cout << (p1 != p2) << endl;cout << (p1 <= p2) << endl; return 0;
}

在这里插入图片描述

#include 
#include 
#include using namespace std;int main()
{pair p1{ 1,3 };int a = get<0>(p1);cout << a << endl;return 0;
}

在这里插入图片描述

2.3辅助类

辅助类描述
template struct tuple_size> : std::integral_constant { };std::tuple_size 对 pair 的部分特化提供使用类 tuple 语法,在编译时获得 pair 中元素数的方法,该数总是 2 。
template< std::size_t I, class T1, class T2 >
struct tuple_element>;std::tuple_element 对 pair 的部分特化使用类 tuple 语法,提供 pair 元素类型的编译时访问。

使用

输出pair中的所有元素

#include 
#include 
#include using namespace std;int main()
{pair p1[]{ {1,3},{2,5},{3,7} };for (const auto& [value, num] : p1) {cout << value << " " << num << endl;}return 0;
}

在这里插入图片描述

相关内容

热门资讯

什么是419 419是什么意思... 嗨,辣条陪你理智吃瓜最近刚还想着10月特殊时期可能没啥瓜了,结果一到月底就来了。孟美岐冷不丁就突然上...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
什么是419 419是什么意思... 嗨,辣条陪你理智吃瓜最近刚还想着10月特殊时期可能没啥瓜了,结果一到月底就来了。孟美岐冷不丁就突然上...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...