5.1.1 Pair
template <class _Ty1, class _Ty2>struct pair { // store a pair of valuestypedef pair<_Ty1, _Ty2> _Myt;typedef _Ty1 first_type;typedef _Ty2 second_type;...};
操作函数
| 操作函数 | 影响 |
|---|---|
pair<T1, T2> p |
Default构造函数,建立一个pair,其元素类型分别为T1和T2,各自以其default构造函数初始化 |
pair<T1, T2> p(vall, vall) |
建立一个pair,元素类型分别为T1和T2,以vall和vall为初值 |
pair<T1, T2> p(rv1, rv2) |
建立一个pair,元素类型分别为T1和T2,以rv1和rv2进行搬移式初始化 |
pair<T1, T2> p ( piecewise_construct,t1, t2) |
建立一个pair,元素类型分别为tuple T1和T2,以tuple t1和t2的元素为初值 |
pair<T1, T2> p(p2) |
Copy构造函数,建立p成为p2的拷贝 |
pair<T1, T2> p(rv) |
Move构造函数,将rv的内容移至p,允许隐式类型转换 |
p = p2 |
将p2赋值给p(始自C++11,允许隐式类型转换) |
p = rv |
将rv的值move assign给p(始自C++11,允许隐式类型转换) |
| p.first() | 获得pair内的第一value(直接成员访问) |
| p.second() | h获得pair内的第二value(直接成员访问) |
| get<0> (p) | 等价于p.first() |
| get<1> (p) | 等价于p.second() |
| p1 == p2 | 返回”是否p1等于p2” (等价于p1.first==p2.first&& |
| p1 != p2 | 返回”是否p1不等于p2” ( !(p1==p2) ) |
| p1 < p2 | 返回”是否p1小于p2”(比较first,如果相等则比较second) |
| p1 > p2 | 返回”是否p1大于p2”(比较first,如果相等则比较second) |
| p1 >= p2 | 返回”是否p1大于等于p2” ( !(p1<p2) ) |
| p1 <= p2 | 返回”是否p1小于等于p2”( !(p1>p2) ) |
| p1.swap(p2) | 互换p1和p2的数据 |
| swap(p1, p2) | 互换p1和p2的数据 |
| make_pair(val1, val2) | 返回一个pair,带有val1和val2的类型和数值 |
例子1:将std::pair写入到stream流中
template <typename T1, typename T2>std::ostream& operator<<(std::ostream& strm, const std::pair<T1, T2>& p){return strm << "[" << p.first << ", " << p.second << "]";}
获取值、类型和大小
- 获取值
- 第一个元素:
p.first - 第二个元素:
p.second
- 第一个元素:
- 获取类型
- 方法一:
std::get<0>(p) - 方法二:
tuple_element<1, pair<int, float>>::type
- 方法一:
- 获取大小
using namespace std;
int main(int argc, char* argv[]) {
typedef std::pair
// 获取类型cout << "获取类型: " << endl;cout << " 方式一: std::get<0>(p)" << endl;cout << " first type: " << std::get<0>(p) << endl;cout << " second type: " << std::get<1>(p) << endl;cout << " 方式二: tuple_element<0, IntFloatPari>::type" << endl;cout << " first type: " << typeid(tuple_element<0, IntFloatPari>::type).name() << endl;cout << " second type: " << typeid(tuple_element<1, IntFloatPari>::type).name() << endl;cout << "获取大小: " << endl;cout << " tuple_size: " << tuple_size<IntFloatPari>::value << endl;
}
/ 输出 获取值: first value: 42 second value: 3.14 获取类型: 方式一: std::get<0>(p) first type: 42 second type: 3.14 方式二: tuple_element<0, IntFloatPari>::type first type: int second type: float 获取大小: tuple_size: 2 / ``` 构造函数和赋值
