第03篇 ACM/ICPC竞赛之STL--pair
来源:互联网 发布:淘宝登陆页面无法显示 编辑:程序博客网 时间:2024/06/04 18:57
STL的<utility>头文件中描述了一个看上去非常简单的模板类pair,用来表示一个二元组或元素对,并提供了按照字典序对元素对进行大小比较的比较运算符模板函数。
例如,想要定义一个对象表示一个平面坐标点,则可以:
pair<double, double> p1;
cin >> p1.first >> p1.second;
pair模板类需要两个参数:首元素的数据类型和尾元素的数据类型。pair模板类对象有两个成员:first和second,分别表示首元素和尾元素。
在<utility>中已经定义了pair上的六个比较运算符:<、>、<=、>=、==、!=,其规则是先比较first,first相等时再比较second,这符合大多数应用的逻辑。当然,也可以通过重载这几个运算符来重新指定自己的比较逻辑。
除了直接定义一个pair对象外,如果需要即时生成一个pair对象,也可以调用在<utility>中定义的一个模板函数:make_pair。make_pair需要两个参数,分别为元素对的首元素和尾元素。
在题1067--Ugly Numbers中,就可以用pair来表示推演树上的结点,用first表示结点的值,用second表示结点是由父结点乘以哪一个因子得到的。
#include <iostream>
#include <queue>
using namespace std;
typedef pair<unsigned long, int> node_type;
main()
{
unsigned long result[1500];
priority_queue< node_type
, vector<node_type
>, greater<node_type
> > Q;
Q.push( make_pair(1, 2)
);
for (int i=0; i<1500; i++)
{
node_type node = Q.top(); Q.pop();
switch(node.second
)
{
case 2: Q.push( make_pair(node.first*2, 2)
);
case 3: Q.push( make_pair(node.first*3, 3)
);
case 5: Q.push( make_pair(node.first*5, 5)
);
}
result[i] = node.first
;
}
int n;
cin >> n;
while (n>0)
{
cout << result[n-1] << endl;
cin >> n;
}
return 1;
}<utility>看上去是很简单的一个头文件,但是<utility>的设计中却浓缩反映了STL设计的基本思想。有意深入了解和研究STL的同学,仔细阅读和体会这个简单的头文件,不失为一种入门的途径。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/camel_flying/archive/2009/08/17/4454172.aspx
- 第03篇 ACM/ICPC竞赛之STL--pair
- ACM/ICPC竞赛之STL--pair
- ACM/ICPC竞赛STL--pair
- 第02篇 ACM/ICPC竞赛之STL简介
- 第04篇 ACM/ICPC竞赛之STL--vector
- 第05篇 ACM/ICPC竞赛之STL--iterator简介
- 第06篇 ACM/ICPC竞赛之STL--string
- 第07篇 ACM/ICPC竞赛之STL--stack/queue
- 第08篇 ACM/ICPC竞赛之STL--map
- 第09篇 ACM/ICPC竞赛之STL--algorithm
- 第09篇 ACM/ICPC竞赛之STL--algorithm
- ACM/ICPC竞赛之STL--map
- ACM/ICPC竞赛之STL简介
- ACM/ICPC竞赛之STL--algorithm
- ACM/ICPC竞赛之STL--string
- ACM/ICPC竞赛之STL--iterator简介
- ACM/ICPC竞赛之STL--vector
- ACM/ICPC 竞赛之STL简介
- gvim中使用 cscope
- 第02篇 ACM/ICPC竞赛之STL简介
- 如果有一些引用存在于标记中,则不会重命名这些引用。 解决办法
- (转)Offshore时代的统筹人---3
- asp.net页面事件执行顺序
- 第03篇 ACM/ICPC竞赛之STL--pair
- oracle conceptes(中英文对照官方文档).chm
- D3D 文本
- Named query not known: GraphSession.findLatestProcessDefinitionQuery
- 第04篇 ACM/ICPC竞赛之STL--vector
- 单片机的汉字显示
- %=request.getContextPath() %解释
- 第05篇 ACM/ICPC竞赛之STL--iterator简介
- 第06篇 ACM/ICPC竞赛之STL--string