作者:hahaya
日期:
最近在学习STL,经常会使用到std::pair,于是想看看std::pair到底是个什么样神奇的东西,就跳到了std::pair的源码中,接下来就有了本文~
std::pair的简单使用
std::pair可以将两个值看做一个单元来处理。C++标准库中多处使用了std::pair,其中map和multimap就是使用std::pair来管理键/值(key/value)对的。任何函数如果返回两个值,都可以使用std::pair。下面的代码简单介绍如何std::pair
std::pair的简单分析
通过上面的例子,发现std::pair使用起来十分简单,接下来看看std::pair是如何定义的,SGI STL中的std::pair在文件stl_pair.h中定义,简化后的代码大概如下:
通过上面的代码很容易发现:
- std::pair被定义成struct,而不是class,所以所有成员都是public,因此我们能直接存储std::pair中的值。
- 两个std::pair进行比较时,第一个元素具有较高的优先级。比如在判断两个std::pair是否相等时,如果两个std::pair的第一个元素不相等,其比较结果就成为整个比较行为的结果,如果第一个元素相等才继续比较第二个元素,并把比较结果当成整体比较结果。
- 操作符重载时可以先实现==和<操作符,其他的实现调用这两者即可。
- template函数make_pair不需要你写出参数类型,就可以生成一个pair对象,但是使用make_pair时需要注意一个问题
std::make_pair(1, 22.01)
生成的pair第一个元素是int类型的,第二个元素是double类型的(因为无任何修饰词的浮点字面常量,其类型为double),如果要使std::pair的第二个元素的float类型的,则需要使用std::make_pair(1, 22.01f)
。