pair(对组)
来源:互联网 发布:韦德2006年总决赛数据 编辑:程序博客网 时间:2024/05/17 04:18
struct pair可以将两个值视为一个单元,c++标准程序库内多处使用了这个struct,尤其在map与multimap中就是使用pair来管理其键值/实值(key/value)的成对元素,任何函数返回两个值也需要pair,pair定义于<utility>中
name std{template<class T1, class T2>struct pair{typedef T1 first_type ;typedef T2 second_type ;T1 first ;T2 second ;pair():first(T1()), second(T2()){}pair(const T1& a, const T2& b):first(a), second(b) {}template<class U, class V>pair(const pair<U, V>& p):first(p.first), second(p.second){}};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>&) ;template <class T1, class T2>pair<T1, T2> make_pair(const T1&, const T2&) ;.....};pair是作为struct而不是class的类模板,所以其成员都是public可以直接存取,其中default函数调用各自类型的default函数进行初始化
std::pair<int, float> p;就是以int(),float()来初始化p,这两个构造函数都是返回0值。
这里之所以使用template形式的copy构造函数,是因为构造过程中可能需要隐式型别的转换,如果pair对象被复制,调用的是由系统隐式生成的copy构造函数:
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) ;//calls built-in default copy constructorg(p) ;//calls template constructor}
ps:隐式转换:加入类 A定义一个这样的构造函数A(int ) ; 我们调用的函数的形式是function(A a),而此时我只传过去一个int参数如function(3),则会发生隐式转换,通过调用A(int)函数生成A类型的队形
pair对象的比较:如果两个pair对象的所有元素都相等,这两个pair对象就被视为相等:
namespace std{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 ;}}两个pairs互相比较时,第一个元素具有较高的优先级,只有在第一个元素相等时才比较第二个元素
namespace std{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) ;}}便捷函数:make_pair()
template函数make_pair()使你无需写出型别,就可以生成一个pair对象:
namespace std{template <class T1, class T2>pair<T1, T2> make_pair(const T1& x, const T2& Y){return pair<T1, T2> (x, y) ;}}当生成一个对象时,我们可以这样std::make_pair(42, '@') ;而无需麻烦的写std::pair<int, char>(42, '@')
当有必要对一个接受pair参数的函数楚地值时,此时make_pair()很方便
void f(std::pair<int, const char*>) ;void g(std::pair<const int, std::string>) ;void foo{f(std::make_pair(42, "hello")) ;g(std::make_pair(42, "hello")) ;}从例子中可以看出,make_pair()使得”将两个值当做一个pair参数来传递“的动作更加容易,即使两个值的型别并不准确,也能在template构造函数提供的支持下顺利工作,在map和multimap中应用的比较多。
std::pair<int, float>(42, 7.77)
std::make_pair(42, 7.77)
上一个表达式中是作为float的,后一个作为默认的double在重载函数和模板中应用的时候需要注意了
- pair(对组)
- pair 对组
- C++pair对组
- STL之pair对组
- pair 对组 c++ 基础
- C++中的pair对组
- C++ STL 之 Pair对组
- C++ pair(对组)用法
- C++ pair(对组)用法
- C++编程->pair(对组)
- C++ pair(对组)用法
- C++ pair(对组)用法
- C++ pair(对组)用法
- C++ pair(对组)用法
- C++ pair(对组)用法
- C++ pair(对组)用法
- 对pair的sort
- 对pair进行排序
- 如何用 svn 管理 unity3d 项目
- 豚鼠特工队安稳
- hdu4614 Vases and Flowers(简单线段树 + 二分)
- 从Windows系统上拷贝文件到Linux
- 关于typedef
- pair(对组)
- c/c++程序员应聘常见问题深入剖析
- 关于java和c++中布尔量的比较
- hdu 4336 Card Collector
- hdu 1236
- #include<queue> 【c++】
- 设置和破解Syskey双重加密电脑开机
- UVA 10763 - Foreign Exchange(二分查找)
- 进程与线程及通信总结