pair 的应用
pair
是将 2 个数据组合成一组数据, 当需要这样的需求时就可以使用 pair
, 如 stl
中的 map
就是将 key
和 value
放在一起来保存. 另一个应用是, 当一个函数需要返回 2 个数据的时候, 可以选择 pair
. pair
的实现是一个结构体, 主要的两个成员变量是 first
和 second
因为是使用 struct
不是 class
, 所以可以直接使用 pair
的成员变量.
其标准库类型, pair
类型, 定义在 #include <utility>
头文件中, 定义如下:
- 类模板:
template<class T1, class T2> struct pair
- 参数:
T1
是第一个值的数据类型,T2
是第二个值的数据类型. - 功能:
pair
将一对值 (T1
和T2
) 组合成一个值, 这一对值可以具有不同的数据类型, 两个值可以分别用pair
的两个公有函数first
和second
访问.
定义 (构造函数):
pair<T1, T2> p1; // 创建一个空的 pair 对象 (使用默认构造), 它的两个元素分别是 T1 和 T2 类型, 采用值初始化.
pair<T1, T2> p1(v1, v2); // 创建一个 pair 对象, 它的两个元素分别是 T1 和 T2 类型, 其中 first 成员初始化为 v1, second 成员初始化为 v2.
make_pair(v1, v2); // 以 v1 和 v2 的值创建一个新的 pair 对象, 其元素类型分别是 v1 和 v2 的类型.
p1 < p2; // 两个 pair 对象间的小于运算, 其定义遵循字典次序: 如 p1.first < p2.first 或者 ! (p2.first < p1.first) && (p1.second < p2.second) 则返回 true.
p1 == p2; // 如果两个对象的 first 和 second 依次相等, 则这两个对象相等; 该运算使用元素的==操作符.
p1.first; // 返回对象 p1 中名为 first 的公有数据成员
p1.second; // 返回对象 p1 中名为 second 的公有数据成员
pair 的创建和初始化
pair 包含两个数值, 与容器一样, pair 也是一种模板类型. 但是又与之前介绍的容器不同; 在创建 pair 对象时, 必须提供两个类型名, 两个对应的类型名的类型不必相同.
pair<string, string> anon; // 创建一个空对象 anon, 两个元素类型都是 string
pair<string, int> word_count; // 创建一个空对象 word_count, 两个元素类型分别是 string 和 int 类型
pair<string, vector<int> > line; // 创建一个空对象 line, 两个元素类型分别是 string 和 vector 类型
当然也可以在定义时进行成员初始化:
pair<string, string> author("James","Joy"); // 创建一个 author 对象, 两个元素类型分别为 string 类型, 并默认初始值为 James 和 Joy.
pair<string, int> name_age("Tom", 18);
pair<string, int> name_age2(name_age); // 拷贝构造初始化
pair 类型的使用相当的繁琐, 如果定义多个相同的 pair 类型对象, 可以使用 typedef 简化声明:
typedef pair<string, string> Author;
Author proust("March","Proust");
Author Joy("James","Joy");
变量间赋值:
pair<int, double> p1(1, 1.2);
pair<int, double> p2 = p1; // copy construction to initialize object
pair<int, double> p3;
p3 = p1; // operator =
pair 对象的操作
访问两个元素操作可以通过 first 和 second 访问:
pair<int , double> p1;
p1.first = 1;
p1.second = 2.5;
cout << p1.first << ' ' << p1.second << endl;
// 输出结果: 1 2.5
string firstBook;
if(author.first == "James" && author.second == "Joy")
firstBook="Stephen Hero";
生成新的 pair 对象
还可以利用 make_pair
创建新的 pair 对象:
pair<int, double> p1;
p1 = make_pair(1, 1.2);
cout << p1.first << p1.second << endl;
//output: 1 1.2
int a = 8;
string m = "James";
pair<int, string> newone;
newone = make_pair(a, m);
cout << newone.first << newone.second << endl;
// output: 8 James
通过 tie 获取 pair 元素值
在某些清况函数会以 pair 对象作为返回值时, 可以直接通过 std::tie
进行接收. 比如:
std::pair<std::string, int> getPreson() {
return std::make_pair("Sven", 25);
}
int main(int argc, char **argv) {
std::string name;
int ages;
std::tie(name, ages) = getPreson();
std::cout << "name: " << name << ", ages: " << ages << std::endl;
return 0;
}
版权声明: 本文为 CSDN 博主「sevencheng798」的原创文章, 遵循 CC 4.0 BY-SA 版权协议, 转载请附上原文出处链接及本声明.
原文链接:https://blog.csdn.net/sevenjoin/article/details/81937695
文章评论