第03篇 ACM/ICPC竞赛之STL--pair

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值