C++ utility make_pair 函数

  • 定义和用法

    C++ 98 C++ 11
    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
    std::make_pair 构造一个pair对象,其第一个元素设置为x,第二个元素设置为y。模板类型可以从传递给make_pair的参数隐式推导出来。如果各自的类型是隐式可转换的,则可以从包含不同类型的其他对对象构造对对象。
    C++ 98 C++ 11
    这个函数模板的行为就像定义为:
    template <class T1,class T2>
      pair<T1,T2> make_pair (T1 x, T2 y)
      {
        return ( pair<T1,T2>(x,y) );
      }
    函数返回:
    pair<V1,V2>(std::forward<T1>(x),std::forward<T2>(y))
    其中,类型V1和V2分别是T1和T2的衰减当量(除了reference_wrapper类型,它使用的是对应的引用类型)。如果T1和/或T2是右值引用,则对象将被移动,x和/或y将保持未定义但有效的状态。
  • 参数

    a,b两个对象,其内容交换。
    C++ 98 C++ 11
    类型T应该是可复制构造和可分配的。 类型T应该是可构造移动和可分配移动的(或者为它定义了交换,对于版本(2))。
  • 返回值

    x, y
    一个pair对象,其第一和第二元素分别设置为x和y。模板参数可以隐式推导。
  • 示例

    
    // 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
    
  • 数据竞争

    如果T1或T2(或两者)是支持移动语义的类型的右值引用类型,则修改其对应的参数。
  • 异常安全

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

    pair::pair pair 构造器(public member function )