容器

queue 队列

定义

queue的定义需要两个参数,一个是元素类型,一个容器类型,元素类型是必要的,容器类型是可选的,默认为deque类型

基本方法

  • push(x) 入队,将x接到队列的末端
  • pop() 出队,弹出队列的第一个元素,注意,并不会返回被弹出元素的值
  • front() 访问队首元素
  • back() 访问队尾元素
  • empty() 判断队列是否为空
  • size() 访问队列中的元素个数

priority_queue 优先队列

定义

需要三个参数,一个是元素类型,一个是保存数据的容器类型(默认为vector),一个是比较方式(默认为less()方法,即最大值优先),后两个参数可以省去

自定义比较方式

改变第三个参数比较类

使用greater比较类即为最小值优先,此时对容器类型不能够省略

priority_queue<int,vector<int>,greater<int> >que3;//注意“>>”会被认为错误,
priority_queue<int,vector<int>,less<int> >que4;////最大值优先

自定义比较类(结构体)

可以自定义一个规定对比方式的结构最为第三个参数进行传入,同上容器类型不能够省略

//定义比较结构
struct cmp1{
bool operator ()(int &a,int &b){
return a>b;//最小值优先
}
};
struct cmp2{
bool operator ()(int &a,int &b){
return a<b;//最大值优先
}
};
priority_queue<int,vector<int>,cmp1>que1;//最小值优先
priority_queue<int,vector<int>,cmp2>que2;//最大值优先

重载operate<

我们也可以对数据结构中的operate<进行重载,从而使用其默认的比较类。
这种方法也可以定义结构体中各个变量比较的一个优先级

//自定义数据结构
struct number1{
int x;
bool operator < (const number1 &a) const {
return x>a.x;//最小值优先
}
};
struct number2{
int x;
bool operator < (const number2 &a) const {
return x<a.x;//最大值优先
}
}; priority_queue<number1>que5; //最小优先级队列
priority_queue<number2>que6; //最大优先级队列

基本方法

  • push(x) 插入元素并在容器中进行排序
  • pop() 移除堆顶元素
  • top() 获取堆顶元素
  • empty() 判断队列是否为空
  • size() 访问队列中的元素个数
  • vector 动态数组

定义

一般只使用到一个参数,数据类型参数

基本方法

 重载[] 可以通过下边获取元素
front() 返回第一个元素的值
end() 返回最后一个元素的值
begin() 返回第一个迭代器
end() 返回最后一个迭代器
empty() 判断是否为空
size() 获取元素个数
reserve() 反转数组
clear() 清楚所有元素
push_back(x) 在最后加入元素x
pop_back()

set

可以看成是集合,容器内不含有重复元素
针对集合操作的算法函数见函数部分
multiset 与set相似,不同就是前者支持重复对象

定义

第一个参数是数据类型,第二个参数是比较类(默认为less\<key\>,最大值优先)

基本方法

  • begin()    返回set容器的第一个元素的迭代器
  • end()      ,返回set容器的最后一个元素的迭代器
  • clear()    ,删除set容器中的所有的元素
  • empty()    ,判断set容器是否为空
  • size()      ,返回当前set容器中的元素个数
  • count() 用来查找set中某个某个键值出现的次数。这个函数在set并不是很实用,因为一个键值在set只可能出现0或1次,这样就变成了判断某一键值是否在set出现过了。
  • erase(key_value) , 删除键值key_value的值
  • find() , 返回给定值值得定位器,如果没找到则返回end()。
  • insert(key_value); 将key_value插入到set中 ,返回值是pair\<set\<int\>::iterator,bool>,bool标志着插入是否成功,而iterator代表插入的位置,若key_value已经在set中,则iterator表示的key_value在set中的位置。
  • lower_bound(key_value) , 返回第一个大于等于key_value的定位器
  • upper_bound(key_value), 返回最后一个大于等于key_value的定位器

map

自动建立Key - value的对应,可以根据key值快速查找记录。
multimap 用法与map用法相似,区别在于允许出现重复的key值

定义

第一个参数key类型,第二个参数value类型,第三个参数比较类(默认less\<key\>)

基本方法

重载[] 可以通过下标来修改/插入key-value
insert(key-value) 插入键值对,可以是pair\<key,value\>对,返回一个map的迭代器
find(key) 根据key来查找键值对,返回一个map的迭代器
count(key) 返回键为key的键值对个数
lower_bound(key) 返回大于等于key的一个元素的迭代器
upper_bound(key) 返回大于key的第一个元素的迭代器

next_permutation/prev_permutation(first,last)

转换所给区间内的元素到下(上一个字典序),成功返回TRUE,不成功返回FALSE(不存在下一个字典序)

常用函数:

    字符串转数字:sscanf(str,"%lld",&ans);
数字转字符串:sprintf(str,"%lld",ans);

acm->stl的更多相关文章

  1. HDU 2094 产生冠军 (map容器)

    title: 产生冠军 杭电 2094 tags: [acm,stl] 题目链接 Problem Description 有一群人,打乒乓球比赛,两两捉对撕杀,每两个人之间最多打一场比赛. 球赛的规则 ...

  2. C++ STL泛型编程——在ACM中的运用

    学习过C++的朋友们应该对STL和泛型编程这两个名词不会陌生.两者之间的关系不言而喻,泛型编程的思想促使了STL的诞生,而STL则很好地体现了泛型编程这种思想.这次想简单说一下STL在ACM中的一些应 ...

  3. ACM竞赛常用STL(二)之STL--algorithm

    <algorithm>无疑是STL 中最大的一个头文件,它是由一大堆模板函数组成的.下面列举出<algorithm>中的模板函数: adjacent_find / binary ...

  4. ACM竞赛常用STL(一)

    全排列函数next_permutation STL 中专门用于排列的函数(可以处理存在重复数据集的排列问题) 头文件:#include <algorithm> using namespac ...

  5. stl 在 acm中的应用总结

    总结一些在acm中常用的小技巧,小函数 之前尝试着总结过很多次.都失败了,因为总是担心不全,理解的也不是很透彻.这次再来一次...其实之前保存了很多的草稿就不发布了,当然,下面说的很不全面,路过的大牛 ...

  6. ACM: 强化训练-Inversion Sequence-线段树 or STL·vector

    Inversion Sequence Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%lld & %llu D ...

  7. ACM题目————STL练习之字符串替换

    描述 编写一个程序实现将字符串中的所有"you"替换成"we" 输入 输入包含多行数据 每行数据是一个字符串,长度不超过1000 数据以EOF结束 输出 对于输 ...

  8. ACM题目————STL练习之众数问题

    描述 所谓众数,就是对于给定的含有N个元素的多重集合,每个元素在S中出现次数最多的成为该元素的重数, 多重集合S重的重数最大的元素成为众数.例如:S={1,2,2,2,3,5},则多重集S的众数是2, ...

  9. (ACM)C++ STL 训练(第一天)

    因为老师说ACM考的是纯C++,所以打算抛弃VS的VC++不用了,针对纯C++的编译器有Intel Compiler(不过要钱),MinGw(个人用的),当然还有微软的VC++ 编译器,IDE你们可以 ...

  10. 一些有用的stl知识《acm程序设计》

    accepted           通过 Presentation  Error   输出格式错误 Wrong Answer  答案错误 Runtime Error   多为数组访问越界 程序运行时 ...

随机推荐

  1. LinkedList源码解读

    一.内部类Node数据结构 在讲解LinkedList源码之前,首先我们需要了解一个内部类.内部类Node来表示集合中的节点,元素的值赋值给item属性,节点的next属性指向下一个节点,节点的pre ...

  2. javascript基础-性能优化

    优化点 性能检测 基调网络 http://www.cesule.com/cesule/status/show/3496d91653a14743af2bd2e261aee204 阿里测 http://a ...

  3. vuex所有核心概念完整解析State Getters Mutations Actions

    vuex是解决vue组件和组件件相互通信而存在的,vue理解起来稍微复杂但一旦看懂择即为好用 安装: npm install --save vuex 引入 import Vuex from 'vuex ...

  4. 利用Dockerfile构建mysql镜像并实现数据的初始化及权限设置

    本文提要 本文目的不仅仅是创建一个MySQL的镜像,而是在其基础上再实现启动过程中自动导入数据及数据库用户的权限设置,并且在新创建出来的容器里自动启动MySQL服务接受外部连接,主要是通过Docker ...

  5. numpy中linspace用法 (等差数列创建函数)

    linspace  函数 是创建等差数列的函数, 最好是在 Matlab  语言中见到这个函数的,近期在学习Python 中的 Numpy, 发现也有这个函数,以下给出自己在学习过程中的一些总结. ( ...

  6. sleep()

    sleep() 方法可以使当前线程(即调用该方法的线程)暂停执行一段时间, 让其他线程有机会继续执行, 但它并不释放对象锁: 所以当sleep()方法结束时: 当前线程还是拥有对象锁: 当线程拥有对象 ...

  7. 基于FPGA的均值滤波算法的实现

    前面实现了基于FPGA的彩色图像转灰度处理,减小了图像的体积,但是其中还是存在许多噪声,会影响图像的边缘检测,所以这一篇就要消除这些噪声,基于灰度图像进行图像的滤波处理,为图像的边缘检测做好夯实基础. ...

  8. (文件)图片上传,Spring或SpringMVC框架

    spring或springMVC框架图片(文件)上传 页面部分,用一个简单的form表单提交文件,将图片或文件提交到服务端.一个输入框,用于输入图片的最终名称,一个file文件选择,用于选择图片. 页 ...

  9. JavaBean在jsp中的使用

    JavaBean在Jsp中的引用: 1.用<jsp:useBean>标记: <jsp:useBean id="name" class="classnam ...

  10. js删除 object中的空值

    var data = { a: 'a', b: '' } 删除 b和''的配对, /** * Delete all null (or undefined) properties from an obj ...