首页 > 代码库 > c++11 stl 学习之 pair

c++11 stl 学习之 pair

pair以模板的方式存储两个数据

namespace std {
template <typename T1, typename T2>
struct pair {
// member
T1 first;
T2 second;
...
};
}


p.first
p.second

get<0>(p) C++11
get<1>(p) C++11

示例 PairPrintTest()

//=======================================
pair接受多个参数
示例 PairTuple()
//========================================
make_pair 中使用ref() 代替参数的引用&
示例 PairRefTest
//=============================================
tie 的用法
示例 TieTest
//=====================================

#include <tuple>#include <iostream>#include <utility>#include <tuple>#include <complex>#include <string>using namespace std;template<typename T1,typename T2>ostream& operator << (ostream& strm,    const pair<T1, T2>&p){    return strm << "[" << p.first << "," << p.second << "]";}void PairPrintTest(){    typedef std::pair<int, float> IntFloatPair;    IntFloatPair p(42, 3.14f);    cout << get<0>(p) << " "<< get<1>(p) << endl;    cout << p << endl;}//==============================class Foo {public:    Foo(tuple<int, float>) {        cout << "Foo::Foo(tuple)" << endl;    }    template <typename... Args>    Foo(Args... args) {        cout << "Foo::Foo(args...)" << endl;    }};void PairTupleTest(){    tuple<int, float> t(1, 2.22f);    // pass the tuple as a whole to the constructor ofFoo:    pair<int, Foo> p1(42, t);    // pass the elements ofthe tuple to the constructor ofFoo:    pair<int, Foo> p2(piecewise_construct, make_tuple(42), t);}void PairRefTest(){    int i = 0;    auto p = make_pair(&i, &i);    ++p.first;    ++p.second;    cout << "When use ‘&‘ i: " << i << endl;    auto p1 = make_pair(ref(i), ref(i));    ++p1.first;    ++p1.second;    cout << "When use ‘ref()‘ i: " << i << endl;}void TieTest(){    pair<char, char> p = make_pair(x, y); //pair oftwo chars    char c;    tie(ignore, c) = p; //extract second value into c (ignore first one)    cout << c << endl;    tie(c, ignore) = p;    cout << c << endl;}void TurpleTest(){    int n = 998;    auto tt = std::tuple_cat(std::make_tuple(42, 7.7, "hello"),        std::tie(n));}int _tmain(int argc, _TCHAR* argv[]){    PairPrintTest();    PairTupleTest();    PairRefTest();    TieTest();    TurpleTest();    return 0;}

 

c++11 stl 学习之 pair