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

原文地址:https://www.cnblogs.com/hxsyl/p/2687033.html