zoukankan      html  css  js  c++  java
  • STL之Pairs

    什么是Pair

      关于类Pair的介绍,下面是引自《C++ Standard Library》的一段话:

      The class pair is provided to treat two values as a single unit. It is used in several places within the C++ standard library. In particular, the container classes map and multimap use pairs to manage their elements, which are key/value pairs (See Section 6.6). Another example of the usage of pairs is functions that return two values.

    Pair的定义

      The structure pair is defined in <utility> as follows:

    namespace std 
    {
        template <class T1, class T2>
        struct pair 
        {
            //type names for the values
            typedef T1 first_type;
            typedef T2 second_type;
    
            //member
            T1 first;
            T2 second;
    
            /* default constructor
            * - T1 () and T2 () force initialization for built-in types
            */
            pair(): first(T1()), second(T2()) 
            {
            }
    
            //constructor for two values
            pair(const T1& a, const T2& b): first(a), second(b) 
            {
            }
    
            //copy constructor with implicit conversions
            template<class U, class V>
            pair(const pair<U,V>& p): first(p.first), second(p.second) 
            {
            }
        };
    
    
        //comparisons
        template <class T1, class T2>
        bool operator== (const pair<T1,T2>&, const pair<T1,T2>&);
    
        template <class T1, class T2>
        bool operator< (const pair<T1,T2>&, const pair<T1,T2>&);
        
        //similar: !=, <=, >, >=
        
        //convenience function to create a pair
        template <class T1, class T2>
        pair<T1,T2> make_pair (const T1&, const T2&);
    }
    
    namespace std {
        //comparisons
        template <class T1, class T2>
        bool operator== (const pair<T1,T2>& x, const pair<T1,T2>& y) 
        {
            return x.first == y.first && x.second == y.second;
        }
    
        //similar: !=, <=, >, >=
    
        template <class T1, class T2>
        bool operator< (const pair<T1,T2>& x, const pair<T1,T2>& y) 
        {
            return x.first < y.first || (!(y.first < x.first) && x.second < y.second);
        }
    
        //create value pair only by providing the values
        template <class T1, class T2>
        pair<Tl,T2> make_pair (const T1& x, const T2& y) {
            return pair<T1,T2>(x, y);
        }
    }

    Pair的使用

    std::pair<int,float> p;    //initialize p. first and p.second with zero
    
    void f(std::pair<int,const char*>);
    void g(std::pair<const int.std::string>);
    void foo 
    {
        std::pair<int,const char*> p(42,"hello");
        f(p);    //OK: calls built-in default copy constructor
        g(p);    //OK: calls template constructor
    }
    
    std::make_pair(42, '@'); //or 
    std::pair<int,char>(42,'@');
    
    
    void f(std::pair<int,const char*>);
    void g(std::pair<const int,std::string>);
    
    void foo {
        f(std::make_pair(42,"hello"));     //pass two values as pair
        g(std::make_pair(42,"hello"));     //pass two values as pair
                                            // with type conversions
    }
    
    std::pair<int,float>(42,7.77);
    //does not yield the same as
    std::make_pair(42,7.77);

      The C++ standard library uses pairs a lot.

      For example, the map and multimap containers use pair as a type to manage their elements, which are key/value pairs. See Section 6.6, for a general description of maps and multimaps, and in particular page 91 for an example that shows the usage of type pair. Objects of type pair are also used inside the C++ standard library in functions that return two values (see page 183 for an example).

  • 相关阅读:
    AppDomain应用及 如何改变web.config / App.config位置
    WPF 值转换器 IValueConverter 例子
    ICSharpCode.SharpZipLib .dll 使用说明
    Unity 概述
    MySQL速度变慢,怎么办?【转载】
    微软企业库 Enterprise Library
    MySql 慢查询设置 和 查看
    Prism 概述
    使用SSH Secure Shell登陆Linux出现乱码的解决
    RHEL5 YUM安装GCC
  • 原文地址:https://www.cnblogs.com/wiessharling/p/3975810.html
Copyright © 2011-2022 走看看