STL 容器操作
- vector
set转化为vector:vec.assign(set.begin(), set.end())
- map
1. map默认从小到达排序,想要从大到小,可以:
map<string, int, greater<string>>
2. map 不可以使用sort排序!不过可以使用在定义map的时候,传入函数指针自定义map排序
- list
比如在第五个位置插入3个88的 错误方法:
auto ite = data.begin();
data.insert(iter + 5, 3, 88);
ite不可以直接+5,不支持这个操作,实际上ite一般支持++,比如++ite比ite++更简单?
正确方法:
auto iter = begin(data);
std::advance(iter, 5);
data.insert(iter, 3, 88);
但是vector的insert就可以直接vec.insert(vec.begin() + 5, 88);
- set
set没有push()和push_back()操作,取代的是:insert() 或 emplace()!
- stack
top(), size(), empty()
push() / emplace(),pop()
swap()
- priority_queue
优先队列,priority_queue<class Type,class Container,class Compare>,即类型,容器和比较器(比较器类型),
默认容器为vector,可以自定义容器类型,并自定义排序函数,我们并不关心优先队列是不是vector实现的!
但是要是出现了自定义类型,一般想要自定义函数,这个时候中间的容器就不可以省略了 —— 建议容器写在最后,根据自定义类型推测默认vector<T>容器!
自定义比较有三种方法:
// 在结构体/类内重载<struct Status{
int val;
ListNode* node;
bool operator < (const Status &tmp) const{
// 函数必须是静态的 使得该函数可以被 const 对象也就是常量所调用
// 形参可以加上const关键字和&,保证安全性,提高效率
return val > tmp.val;
}
};
priority_queue<Status> pq;
// 自定义比较函数模板结构体,或者说重载的是()!!!
struct cmp{ bool operator ()(const node &a, const node &b)
{
return a.value>b.value;// 按照value从小到大排列
}
};
priority_queue<node, vector<node>, cmp>q;
第三种方法:友元函数,略
没有见到使lambda表达式实现的,因为它的参数不是一个函数,而是一个结构体,或者不理会参数重载更简单。
STL 容器操作的更多相关文章
- STL容器操作
目录 1. 数组 2. Vector 3. List 3.1. std::forward_list 4. Tuple 4.1. 运行期索引 4.2. 元组合并 4.3. 元祖遍历 5. Pair 6. ...
- STL容器能力一览表和各个容器操作函数异常保证
STL容器能力一览表 Vector Deque List Set Multiset map Multimap 典型内部 结构 dynamic array Array of arrays Doubly ...
- 【C++】STL,vector容器操作
C++内置的数组支持容器的机制,但是它不支持容器抽象的语义.要解决此问题我们自己实现这样的类.在标准C++中,用容器向量(vector)实现.容器向量也是一个类模板.标准库vector类型使用需要的头 ...
- c++ stl容器set成员函数介绍及set集合插入,遍历等用法举例
c++ stl集合set介绍 c++ stl集合(Set)是一种包含已排序对象的关联容器.set/multiset会根据待定的排序准则,自动将元素排序.两者不同在于前者不允许元素重复,而后者允许. 1 ...
- STL容器删除元素的陷阱
今天看Scott Meyers大师的stl的用法,看到了我前段时间犯的一个错误,发现我写的代码和他提到错误代码几乎一模一样,有关stl容器删除元素的问题,错误的代码如下:std::vector< ...
- STL容器的适用情况
转自http://hsw625728.blog.163.com/blog/static/3957072820091116114655254/ ly; mso-default-props:yes; m ...
- STL容器的遍历删除
STL容器的遍历删除 今天在对截包程序的HashTable中加入计时机制时,碰到这个问题.对hash_map中的每个项加入时间后,用查询函数遍历hash_map,以删除掉那些在表存留时间比某个阈值长的 ...
- STL容器与配接器
STL容器包括顺序容器.关联容器.无序关联容器 STL配接器包括容器配接器.函数配接器 顺序容器: vector 行为类似于数组,但可以根据要求 ...
- STL容器的本质
http://blog.sina.com.cn/s/blog_4d3a41f40100eof0.html 最近在学习unordered_map里面的散列函数和相等函数怎么写.学习过程中看到了一个好帖子 ...
- STL容器是否是线程安全的
转载http://blog.csdn.net/zdl1016/article/details/5941330 STL的线程安全. 说一些关于stl容器的线程安全相关的话题. 一般说来,stl对于多线程 ...
随机推荐
- Python新手教学
## 简介Python是一种简单易学的编程语言,广泛应用于各个领域,包括Web开发.数据科学.人工智能等.本文将为新手程序员提供Python基础知识的教学,包括变量.数据类型.条件语句.循环.函数等内 ...
- php xattr操作文件扩展属性再续
今天偶然发现自己电脑还有一个隐藏硬盘,500G的我平时没挂载,就没用到,然后这次就给它挂载了,然后发现读取文件,操作xattr都很慢,比之前速度慢10倍左右,猜测可能是固态硬盘和机械硬盘的差别关系.看 ...
- sqli注入之sqlmap
善于使用google hacking的搜索语法不失为一种有效的挖洞方法. 利用google浏览器inurl搜索语法寻找可能sql注入的php网站url inrul:productInfo.php?id ...
- 数据库研发人员必看的MySQL 8.0新特性
本文汇总了MySQL8.0 面向开发的新特性,总共有12个新特性,有想快速了解8.0新特性的朋友,可以看一下哈文章目录:1.公用表达式支持-CTE2.窗口函数3.表达式作为默认值:4.CHECK支持5 ...
- Linux中tar文件压缩与解压
文件压缩与解压缩 一般什么情况下使用文件压缩? 备份数据,数据传输 节省磁盘空间 减少带宽使用 减少负载 减少IO操作 什么情况下进行压缩比较合适? 错过业务高峰期,由于文件的压缩会瞬间加大cpu的负 ...
- []JSR 133 (Java Memory Model) FAQ
JSR 133 (Java Memory Model) FAQ Jeremy Manson and Brian Goetz, February 2004 内容列表 究竟什么是内存模型? 其它语言,像C ...
- Spring IOC、DI、AOP原理和实现
(1)Spring IOC原理 IOC的意思是控件反转也就是由容器控制程序之间的关系,把控件权交给了外部容器,之前的写法,由程序代码直接操控,而现在控制权由应用代码中转到了外部容器,控制权的转移是 ...
- 逆向WeChat(八)
上一篇逆向WeChat(七)是逆向微信客户端本地数据库相关事宜. 本篇逆向微信客户端本地日志xlog相关的事宜. 本篇在博客园地址https://www.cnblogs.com/bbqzsl/p/18 ...
- 不会前端也能写官网?没问题,Devbox+Cursor 带你起飞
大家平时都是怎么给自己的产品开发官方网站的? 是不是先在本地配置好环境,然后使用 IDE 写代码,写完代码后部署到服务器生成预览链接,团队协作成员再打开浏览器访问,然后你再修改,再部署,再访问,再修改 ...
- scikit-learn中的Pipeline:构建高效、可维护的机器学习流程
我们使用scikit-learn进行机器学习的模型训练时,用到的数据和算法参数会根据具体的情况相应调整变化, 但是,整个模型训练的流程其实大同小异,一般都是加载数据,数据预处理,特征选择,模型训练等几 ...