zoukankan      html  css  js  c++  java
  • ACM/ICPC竞赛

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


    STL<utility>头文件中描述了一个看上去非常简单的模板类pair,用来表示一个二元组或元素对,并提供了按照字典序对元素对进行大小比较的比较运算符模板函数。

    例如,想要定义一个对象表示一个平面坐标点,则可以:

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


    pair模板类需要两个参数:首元素的数据类型和尾元素的数据类型。pair模板类对象有两个成员:firstsecond,分别表示首元素和尾元素。

    <utility>中已经定义了pair上的六个比较运算符:<><=>===!=,其规则是先比较firstfirst相等时再比较second,这符合大多数应用的逻辑。
    当然,也可以通过重载这几个运算符来重新指定自己的比较逻辑。

    除了直接定义一个pair对象外,如果需要即时生成一个pair对象,也可以调用在<utility>中定义的一个模板函数:make_pairmake_pair需要两个参数,
    分别为元素对的首元素和尾元素。

    在题hduoj 1067--Ugly Numbers中,就可以用pair来表示推演树上的结点,用first表示结点的值,用second表示结点是由父结点乘以哪一个因子得到的。

     1 #include <iostream>
     2 #include <queue>
     3 using namespace std;
     4 typedef pair<unsigned long, int> node_type;
     5 main()
     6 { unsigned long result[1500]; 
     7 priority_queue< node_type, vector<node_type>, greater<node_type> > Q; 
     8 Q.push( make_pair(1, 2) ); 
     9 for (int i=0; i<1500; i++) 
    10 { 
    11 node_type node = Q.top();
    12 Q.pop(); 
    13 switch(node.second) 
    14 { case 2: Q.push( make_pair(node.first*2, 2) ); 
    15 case 3: Q.push( make_pair(node.first*3, 3) ); 
    16 case 5: Q.push( make_pair(node.first*5, 5) ); 
    17 } 
    18 result = node.first; 
    19 } 
    20 int n; cin >> n; 
    21 while (n>0) 
    22 { 
    23 cout << result[n-1] << endl; 
    24 cin >> n; 
    25 } 
    26 return 1;
    27 }


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

     

     

    未完待续:::

     

     

     

     

  • 相关阅读:
    突出展示案例
    下拉菜单案例
    推送人群的选择【技术篇】
    Couchbase 中的分布式储存
    开始了大概三四天的Rails学习之路
    分层架构与公司组织
    极光推送助推视频App,打造最活跃手机新媒体平台
    极光推送CTO黄鑫:技术人员要建立自己的知识图谱
    Android SDK教程
    Android消息推送 SDK 集成指南
  • 原文地址:https://www.cnblogs.com/jeff-wgc/p/4480209.html
Copyright © 2011-2022 走看看