zoukankan      html  css  js  c++  java
  • vector排序,set交并,map

     1 #include <iostream>
     2 #include <algorithm>
     3 #include <vector>
     4 using namespace std;
     5 
     6 bool cmp(const pair<int ,int > &a,const pair<int ,int > &b)
     7 {
     8      return a.second < b.second;//由小到大排序 
     9 }
    10  
    11 int main()
    12 {
    13      int i,j,k,T;
    14      int num;
    15      cin>>num;
    16      vector <pair<int ,int> > a;
    17      for(i=0;i<num;i++)
    18      {
    19           int x,y;
    20           cin>>x>>y;
    21           a.push_back(make_pair(x,y));//注意make_pair后面是圆括号 
    22      }
    23      int _size = a.size(); 
    24      //sort(&a[0],&a[_size],cmp);//第一个不是&a 
    25      sort(a.begin(),a.end(),cmp);//上写两个均可排序 
    26      vector <pair<int ,int> > ::iterator iter;
    27      for(iter=a.begin();iter!=a.end();iter++)
    28           cout<<iter->first<<" "<<iter->second<<endl;
    29      while(1);
    30      return 0;
    31 }
    32           
    33      

    判断存在与否,过去一直用的是count方法。

    map插入数据,以上三种用法,虽然都可以实现数据的插入,但是它们是有区别的,当然了第一种和第二种在效果上是完成一样的,用insert函数插入数据,在数据的插入上涉及到集合的唯一性这个概念,即当map中有这个关键字时,insert操作是插入数据不了的,但是用数组方式就不同了,它可以覆盖以前该关键字对应的值

     注意:下面是在2012成都预选赛时想起的问题

    map <int,bool> mm;
    map <int,bool> ::iterator ptr;
    怎样让迭代器指向第三个元素
    ptr = mm.begin()+2,这样会编译错误,分两次自增又太麻烦。
    还有就是怎样直接返回第三个位置的元素

    对于第一个问题,可以advance(ptr,2)
    第二个问题实际上是随机访问的问题, map不可以的,还是 advance(ptr,2),输出*ptr

    在涉及到容器和算法的操作中,还有两个迭代器函数非常有用:
      
      · advance() 按指定的数目增减迭代器。
      
      · distance() 返回到达一个迭代器所需(递增)操作的数目。
      
      例如:
      
      list iList;
      list::iterator p =
       find(iList.begin(), iList.end(), 2);
      cout << "before: p == " << *p << endl;
      advance(p, 2); // same as p = p + 2;
      cout << "after : p == " << *p << endl;
      
      int k = 0;
      distance(p, iList.end(), k);
      cout << "k == " << k << endl;
      
      advance()函数接受两个参数。第二个参数是向前推进的数目。对于前推迭代器,该值必
      须为正,而对于双向迭代器和随机访问迭代器,该值可以为负。
      
      使用 distance()函数来返回到达另一个迭代器所需要的步骤。
      注意
      
      distance()函数是迭代的,也就是说,它递增第三个参数。因此,你必须初始化该参数
      。未初始化该参数几乎注定要失败。

  • 相关阅读:
    Android的LinearLayout中orientation默认值为什么是HORIZONTAL
    Android中HttpURLConnection对象是怎么生成的
    记一个擦除硬盘数据,防止已删除文件被恢复的程序
    添加一个Android框架层的系统服务与实现服务的回调
    在 Activity 中实现 getContentView 操作
    (01)明明配置了log4j.properties为什么还是不打印日志
    (05)pom.xml文件报错web.xml is missing and <failOnMissingWebXml> is set to true
    (04)maven中的几个常用插件
    (03)开发环境eclipse、myEclipse本地tomcat调试发布maven项目遇到的糟心事
    (04)Storm与Kafka结合使用简单案例
  • 原文地址:https://www.cnblogs.com/hxsyl/p/2687033.html
Copyright © 2011-2022 走看看