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对于多线程 ...
随机推荐
- 本地文件包含漏洞详解与CTF实战
1. 本地文件包含简介 1.1 本地文件包含定义 本地文件包含是一种Web应用程序漏洞,攻击者通过操控文件路径参数,使得服务器端包含了非预期的文件,从而可能导致敏感信息泄露. 常见的攻击方式包括: 包 ...
- k8s之ExternalName使用
一.简介 externalName Service是k8s中一个特殊的service类型,它不需要指定selector去选择哪些pods实例提供服务,而是使用DNS CNAME机制把自己CNAME到你 ...
- delphi12 Android Edit SDK安装
安装 delphi 12.1 后,编译 FMX Android 程序失败! 查找原因,SDK配置全是叹号! 之前用过SDK Manager.exe,直接打开即可以选择下载,但现在发现没有了,查找资料如 ...
- Navicat Premium 16下载与安装
1.可以通过以下两种方式下载 a.官网下载地址 https://www.navicat.com.cn/download/navicat-premium b.百度网盘下载地址 链接:https://pa ...
- 从零开始:NetBox 4.1 Docker 部署和升级
前言 由于Netbox 官方的中文语言日渐完善,所以新出一个使用官方Docker源部署和升级的教程. Netbox 系列文章:https://songxwn.com/categories/NetBox ...
- pycharm之常用插件
参考:http://pycharm.iswbm.com/zh_CN/latest/ 1. Key Promoter X 如果让我给新手推荐一个 PyCharm 必装插件,那一定是 Key Promot ...
- openEuler欧拉部署Jenkins
一.系统优化 关闭防火墙 systemctl stop firewalld systemctl disable firewalld 二.安装Jenkins dnf -y install docker ...
- R数据分析:做量性研究的必备“家伙什”-furniture包介绍
In conjunction with many other tidy tools, the package should be useful for health, behavioral, and ...
- 【数据结构】【直接排序法】Java代码
public class 直接排序 { /** * 直接排序法 仅排序1轮 * @param arr 数组 * @param ji 基准索引,填写几,就以谁为基准进行一次划分 */ public st ...
- nginx jupyterWeb
location /jupyterWeb/ { add_header X-Frame-Options SAMEORIGIN; add_header Access-Control-Allow-Origi ...