C++ pair和make_pair的应用与实现

pair 的用法

  • std::pair主要的作用是将两个数据组合成一个数据,两个数据可以是同一类型或者不同类型。
  • C++标准程序库中凡是“必须返回两个值”的函数, 也都会利用pair对象。
  • class pair可以将两个值视为一个单元。容器类别map和multimap就是使用pairs来管理其健值/实值(key/value)的成对元素。
  • pair被定义为struct,因此可直接存取pair中的个别值.。
  • 两个pairs互相比较时, 第一个元素正具有较高的优先级.。

make_pair的用法

无需写出型别, 就可以生成一个pair对象

例:
std::make_pair(42, '@');
而不必费力写成:
std::pair<int, char>(42, '@')

pair与make_pair的应用

pair是将2个数据组合成一个数据,当需要这样的需求时就可以使用pair,如stl中的map就是将key和value放在一起来保存。另一个应用是,当一个函数需要返回2个数据的时候,可以选择pair。 pair的实现是一个结构体,主要的两个成员变量是first second 因为是使用struct不是class,所以可以直接使用pair的成员变量。我们可以使用pair的构造函数也可以使用make_pair来生成我们需要的pair。 一般make_pair都使用在需要pair做参数的位置,可以直接调用make_pair生成pair对象很方便,代码也很清晰。 另一个使用的方面就是pair可以接受隐式的类型转换,这样可以获得更高的灵活度。

pair的实现:

template<class T1, class T2>
struct pair
{
    typedef T1 first_type;
    typedef T2 second_type;

    T1 first;
    T2 second;

    // 默认构造函数
    pair():first(T1()),second(T2()){}

    // 构造函数
    pair(const T1 &a, const T2 &b):first(a), second(b){}

    // 拷贝构造函数
    template<class U, class V>
    pair(const pair<u, v> &p):first(p.fist), second(p.second)
    {
        cout<< "copy" << endl;
    }
};

// 比较函数
template<class T1, class T2>
bool operator==(const pair<T1, T2> &p1, const pair<T1, T2>&p2)
{
    return p1.first == p2.first && p1.second == p2.second;
}

template<class T1, class T2>
bool operator>(const pair<T1, T2> &p1, const pair<T1, T2>&p2)
{
    return (p1.first > p2.first) || (!(p1.first < p2.first) && p1.second > p2.second);
}

template<class T1,class T2>
bool operator<(const pair<T1,T2>&s1,const pair<T1,T2>&s2)
{
	return (s1.first<s2.first)||(!(s1.first>s2.first)&&s1.second<s2.second);
}

make_pair的简单实现:

//make_pair
template<typename T1, typename T2>
pair<T1, T2> make_pair(const T1 &f, const T2 &s)
{
    return pair<T1, T2>(f, s);
}

关于C++ pair 和make_pair的用法

C++标准库---pair用法及实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值