vector排序,set交并,map

简介: 1 #include 2 #include 3 #include 4 using namespace std; 5 6 bool cmp(const pair &a,const pair &b) 7 { 8 return a.

 

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

 

 

目录
相关文章
|
1月前
|
存储 自然语言处理 C++
map和set的简单介绍
map和set的简单介绍
20 1
|
1月前
|
存储 安全 Java
java集合框架及其特点(List、Set、Queue、Map)
java集合框架及其特点(List、Set、Queue、Map)
|
3月前
|
JavaScript 前端开发 定位技术
JavaScript 中如何代理 Set(集合) 和 Map(映射)
JavaScript 中如何代理 Set(集合) 和 Map(映射)
50 0
|
3月前
|
存储 安全 Java
Map和Set(JAVA)
Map和Set(JAVA)
50 1
|
3月前
|
编译器 C++ 容器
【C++学习手札】基于红黑树封装模拟实现map和set
【C++学习手札】基于红黑树封装模拟实现map和set
|
2天前
|
存储 JavaScript 索引
js开发:请解释什么是ES6的Map和Set,以及它们与普通对象和数组的区别。
ES6引入了Map和Set数据结构。Map的键可以是任意类型且有序,与对象的字符串或符号键不同;Set存储唯一值,无重复。两者皆可迭代,支持for...of循环。Map有get、set、has、delete等方法,Set有add、delete、has方法。示例展示了Map和Set的基本操作。
16 3
|
3天前
|
存储 搜索推荐 C++
【C++高阶(二)】熟悉STL中的map和set --了解KV模型和pair结构
【C++高阶(二)】熟悉STL中的map和set --了解KV模型和pair结构
|
23天前
|
存储 JavaScript 前端开发
set和map的区别
set和map的区别
30 4
|
1月前
|
存储 编译器 容器
用红黑树封装实现map和set
用红黑树封装实现map和set
14 0
|
1月前
|
存储 JSON C++
【C++】容器篇(五)—— map和set的基本介绍
【C++】容器篇(五)—— map和set的基本介绍