函数模板
<utility>

std::make_pair

template <class T1, class T2>  pair<T1,T2> make_pair (T1 x, T2 y);
template <class T1, class T2>  pair<V1,V2> make_pair (T1&& x, T2&& y);  // see below for definition of V1 and V2
构造 pair 对象
构造一个 pair 对象,将其第一个元素设置为 x,第二个元素设置为 y

模板类型可以从传递给 make_pair 的参数中隐式推导出来。

pair 对象可以从包含不同类型的其他 pair 对象构造,如果相应的类型可以隐式转换。

此函数模板的行为与如下定义相同:
1
2
3
4
5
template <class T1,class T2>
  pair<T1,T2> make_pair (T1 x, T2 y)
  {
    return ( pair<T1,T2>(x,y) );
  }
函数返回
1
pair<V1,V2>(std::forward<T1>(x),std::forward<T2>(y))
其中 V1V2 分别是 T1T2decay 等价物(除了 reference_wrapper 类型,它们会使用相应的引用类型代替)。

如果 T1 和/或 T2右值引用,则对象会被移动,而 x 和/或 y 将处于未定义但有效状态。

参数

x, y
值,分别赋给正在构造的 pair 对象的 firstsecond 成员。

返回值

一个 pair 对象,其 firstsecond 元素分别设置为 xy
模板参数可以被隐式推导。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// make_pair example
#include <utility>      // std::pair
#include <iostream>     // std::cout

int main () {
  std::pair <int,int> foo;
  std::pair <int,int> bar;

  foo = std::make_pair (10,20);
  bar = std::make_pair (10.5,'A'); // ok: implicit conversion from pair<double,char>

  std::cout << "foo: " << foo.first << ", " << foo.second << '\n';
  std::cout << "bar: " << bar.first << ", " << bar.second << '\n';

  return 0;
}

输出

foo: 10, 20
bar: 10, 65


数据竞争

如果 T1T2 (或两者) 是支持移动语义的类型的右值引用类型,则其相应的参数会被修改。

异常安全

该函数为每个对象提供与相应的元素构造函数相同的保证级别。

另见