容器

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. Some 3D Graphics (rgl) for Classification with Splines and Logistic Regression (from The Elements of Statistical Learning)(转)

    This semester I'm teaching from Hastie, Tibshirani, and Friedman's book, The Elements of Statistical ...

  2. js设置,获取,删除Cookie

    //JS操作cookies方法! //写cookies function setCookie(name,value) {     var Days = 30;     var exp = new Da ...

  3. C. Friends

    C. Friends 题意 对于任一点,求到此点距离不超过6的节点数. 分析 第一次dfs,形成一个以 1 为根的有向树,设 down[i][j] 为以i为根节点,距离 i 点距离不超过 j 的节点数 ...

  4. Sizzle 源码分析 (二)

    在Sizzle函数中,如果能快速处理或者通过querySelector处理,那么就使用它处理.否则使用select函数处理 . select函数 select = Sizzle.select = fu ...

  5. msf 之 webshell 提权

    首先建议一下到网上查查meterpreter的用法在看这篇文章,理解为什么要使用msf来提权(因为msf里边有个meterpreter很强大 ^_^)Metasploit 拥有msfpayload 和 ...

  6. 由 “无法使用从远程表选择的 lob 定位符” 错误而引导出来的一系列问题解决方案

    周一上班遇到一个数据加工问题:无法使用从远程表选择的 lob 定位符,由于数据源表不是自己的,不能对源数据做修改,于是我打起了存储过程的主意 我们公司的存过是分三步走,第一层是同步源数据,第二层是对一 ...

  7. sed的用法

    1.什么是sed sed命令是一个流线式.非交互式编辑器,可以实现在vi等编辑器中一样的编辑效果.   2.sed的工作原理 模式空间(pattern space) sed一次处理一行文本(或输入), ...

  8. spring + springmvc+ mybatis 事务管理及控制

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  9. IBM新合作伙伴计划助力企业转型升级

        IBM作为老牌企业,一直在引领者技术方面的变革.当IBM再一次从自我革新开始,期望能够更快的将认知计算和云推广给自己的合作伙伴和用户们,以帮助他们在新的转型期内,能够快人一步.         ...

  10. 微信jssdk分享功能,jssdk成功调用,分享内容自定义失败

    前提:调用微信jssdk分享功能,通过微信开发者工具调试,调用正常,无任何报错信息. 问题:调用成功,且开发者工具正常显示,但是通过真机调试,分享出去后,自定义内容失效,为微信自动获取的默认内容!截止 ...