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()函数是迭代的,也就是说,它递增第三个参数。因此,你必须初始化该参数
      。未初始化该参数几乎注定要失败。

  • 相关阅读:
    4 Apr 18 软件开发目录 logging模块的使用 序列化(Json, Pickle) os模块
    3 Apr 18 内置函数 列表生成式与生成器表达式 模块的使用之import 模块的使用之from…import…
    2 Apr 18 三元表达式 函数递归 匿名函数 内置函数
    30 Mar 18 迭代器 生成器 面向过程的编程
    29 Mar 18 函数 有参、无参装饰器
    28 Mar 18 函数
    27 Mar 18 函数的参数
    26 Mar 18 函数介绍
    23 Mar 18 文件处理
    22 Mar 18 补充数据类型+字符编码+文件处理
  • 原文地址:https://www.cnblogs.com/hxsyl/p/2687033.html
Copyright © 2011-2022 走看看