ACM模版

pair

STL的<utility>头文件中描述了一个看上去非常简单的模版类pair,用来表示一个二元组或元素对,并提供了按照字典序对元素对进行大小比较运算符模版函数。
Example,想要定义一个对象表示一个平面坐标点,则可以:

pair<double, double> p;
cin >> p.first >> p.second;

pair模版类需要两个参数:首元素的数据类型和尾元素的数据类型。pair模版类对象有两个成员:first和second,分别表示首元素和尾元素。
在<utility>中已经定义了pair上的六个比较运算符:<、>、<=、>=、==、!=,其规则是先比较first,first相等时再比较second,这符合大多数应用的逻辑。当然,也可以通过重载这几个运算符来重新指定自己的比较逻辑。
除了直接定义一个pair对象外,如果需要即时生成一个pair对象,也可以调用在<utility>中定义的一个模版函数:make_pair。make_pair需要两个参数,分别为元素对的首元素和尾元素。

Ugly Numbers的实现代码中,就可以用pair来表示推演树上的结点,first表示结点的值,用second表示结点是由父结点乘以哪一个因子得到的。

<utility>看上去是一个很简单的头文件,但是<utility>的设计中却浓缩反映了STL设计的基本思想。有意深入了解和研究STL的朋友,仔细阅读和体会这个简单的头文件,不失为一种入门的途径。