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).

时间: 2025-01-05 20:11:50

STL之Pairs的相关文章

codeforces 1045I Palindrome Pairs 【stl+构造】

题目:戳这里 题意:给1e5个字符串,问有多少对字符串组合,满足最多只有一种字符有奇数个. 解题思路:每种情况用map存一下就行了.感觉这题自己的代码思路比较清晰,所以写个题解记录一下 附ac代码: 1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const int maxn = 2e5 + 10; 5 const ll mod = 998244353; 6 int arr[33]; 7 i

STL set,map

一.set和multisetset, multiset, map, multimap内部元素有序排列,新元素插入的位置取决于它的值,查找速度快.除了各容器都有的函数外,还支持以下成员函数:find: 查找等于某个值 的元素(x小于y和y小于x同时不成立即为相等)lower_bound : 查找某个下界upper_bound : 查找某个上界equal_range : 同时查找上界和下界count :计算等于某个值的元素个数(x小于y和y小于x同时不成立即为相等)insert: 用以插入一个元素或

STL map详细用法和make_pair函数

今天练习华为上机测试题,遇到了map的用法,看来博客http://blog.csdn.net/sprintfwater/article/details/8765034:感觉很详细,博主的其他内容也值得学习:后面附上今天的练习题目. 首先make_pair Pairs C++标准程序库中凡是“必须返回两个值”的函数, 也都会利用pair对象 class pair可以将两个值视为一个单元.容器类别map和multimap就是使用pairs来管理其健值/实值(key/va lue)的成对元素. pai

leetcode 336. Palindrome Pairs

传送门 Given a list of unique words. Find all pairs of distinct indices (i, j) in the given list, so that the concatenation of the two words, i.e. words[i] + words[j] is a palindrome. Example 1:Given words = ["bat", "tab", "cat"

《泛型编程与stl》笔记

以下是STL六大组件(componments): adapters  配接器 用来修饰其他组件.包括iterator adapters.function adapters.container adapters三大类. allocators 配置器 用来分配空间.空间可来自于内存或磁盘--取决于配置器如何 实现.主要用来服务容器. algorithms 算法 如sort,bineary search,permutation.... containers 容器 就是数据结构,用来存放元素.如vect

STL学习笔记(第四章 通用工具)

本章讲解C++标准程序库中的通用工具.它们是由短小精干的类和函数构成. Pairs(对组) class pair可以将两个值视为一个单元.STL内多处使用了pair.尤其容器map和multimap,就是使用pairs来管理key/value的成对元素. struct pair定义与<utility>: namespace std{ template <class T1,class T2> struct pair{ //type names for the values typed

STL std::pair基本用法

std::pair 是一个结构体模板,其可于一个单元内存储两个相异对象.是 std::tuple 的拥有两个元素的特殊情况. 一般来说,pair 可以封装任意类型的对象,可以生成各种不同的 std::pair<T1, T2> 对象,可以是数组对象或者包含 std::pair<T1,T2> 的 vector 容器.pair 还可以封装两个序列容器或两个序列容器的指针. 1. 定义 #include <utility> template<class T1, class

Leetcode-24 Swap Nodes in Pairs

#24. Swap Nodes in Pairs Given a linked list, swap every two adjacent nodes and return its head. For example, Given 1->2->3->4, you should return the list as 2->1->4->3. Your algorithm should use only constant space. You may not modify t

STL学习思想

1.模版:一定要注意参数和返回值的模版 2.STL一系列的API:一定要注意返回值 3.容器中的都是值拷贝,而不是引用,在执行插入时,内部实行拷贝动作,所以STL中插入类时,一般都必须:无参构造函数,拷贝构造函数,重载=运算符,必须的自己重写,达到深拷贝!!! 4.一元谓词:函数只有一个参数,谓词:代表函数的返回值必须为bool类型;   二元谓词:函数只有二个参数,谓词:代表函数的返回值必须为bool类型; 5.算法和具体的数据类型相分离:通过函数对象(仿函数)来实现,本质:函数指针!!! 6