set容器几个关键函数
set在OI中非常好用,归纳几种常见的功能qwq
#include<iostream>
#include<cstdio>
#include<set>
//set容器常见用法
using namespace std;
//用仿函数可以做到自定义排序规则
class R
{
public:
bool operator()(const int &pre,const int &bac)
{
return pre>bac;//保证序列前大于后
}
};
set<int/*,R*/> s; //去掉注释就会使用仿函数,
int main()
{
s.insert();
s.insert();
s.insert();
s.insert();
s.insert(); for(set<int>::iterator i=s.begin();i!=s.end();i++)
cout<<*i<<" "; //print 1 2 3 4 5 //erase
cout<<endl<<"Erase";
cout<<endl<<s.erase()<<endl; //删除成功返回1,否则返回0 for(set<int>::iterator i=s.begin();i!=s.end();i++)
cout<<*i<<" "; //print 1 2 4 5 //uper_bound & lower_bound
//uper_bound(x):返回 s中 满足大于x 的最小元素 的迭代器
//lower_bound(x):返回 s中 满足大于等于x 的最小元素 的迭代器
cout<<endl<<"uper_bound & lower_bound";
cout<<endl<<*s.upper_bound(); //print 4 cout<<endl<<*s.lower_bound()<<endl; //print 4 cout<<endl<<*s.upper_bound(); //print 5 cout<<endl<<*s.lower_bound()<<endl; //print 4 cout<<endl<<(s.lower_bound()==s.end())<<endl; //print 1 当没有一个元素大于等于6时,返回尾迭代器 //insert
cout<<endl<<"insert"<<endl;
s.insert(); for(set<int>::iterator i=s.begin();i!=s.end();i++)
cout<<*i<<" "; //print 1 2 4 5 6
return ;
}
值得注意的是,当我们用仿函数改变规则使序列从大到小后,upper_bound和lower_bound的意义就不是注释所描述的那样了。现在这两个函数的功能会很奇怪,下面我用一种适用于任何情况的简单非专业描述来说明这两个函数的功能
lower_bound(x) :
- 当容器中存在等于x的元素,返回该元素迭代器
- 否则,假设按照容器元素排列规则将x插入容器合适位置,那么返回的是插入后 x下一个(右边)元素的迭代器,若无元素则返回尾迭代器
exa.
- 6 5 3 2 1 x=4,假设插入后:6 5 4 3 2 1 此时 返回元素3的迭代器
- # % ^ & * ( ,假设插入¥(假设这是有序序列),# ¥ % ^ & * ( 此时 返回元素%的迭代器
upper_bound(x) :
就是没有1.规则的lower_bound(x) 。。。其他一样
set容器几个关键函数的更多相关文章
- online ddl 使用、测试及关键函数栈
[MySQL 5.6] MySQL 5.6 online ddl 使用.测试及关键函数栈 http://mysqllover.com/?p=547 本文主要分为三个部分,第一部分是看文档时的笔记:第 ...
- C++ - 容器(container)的erase()函数
容器(container)的erase()函数 本文地址: http://blog.csdn.net/caroline_wendy/article/details/23996013 容器(contai ...
- C++ Opencv 傅里叶变换的代码实现及关键函数详解
一.前言 最近几天接触了图像的傅里叶变换,数学原理依旧不是很懂,因此不敢在这里妄言.下午用Opencv代码实现了这一变换,有一些经验心得,愿与大家分享. 二.关键函数解析 2.1copyMakeBor ...
- [pixhawk笔记]6-uORB流程及关键函数解析
本文中将结合代码.文档及注释,给出uORB执行流程及关键函数的解析,由于uORB的机制实现较为复杂,所以本文主要学习如何使用uORB的接口来实现通信.回到上一篇笔记中的代码: #include < ...
- 痞子衡嵌入式:在IAR开发环境下将关键函数重定向到RAM中执行的三种方法
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在IAR开发环境下将关键函数重定向到RAM中执行的三种方法. 嵌入式项目里应用程序代码正常是放在 Flash 中执行的,但有时候也需要将 ...
- 痞子衡嵌入式:MCUXpresso IDE下将关键函数重定向到RAM中执行的几种方法
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是MCUXpresso IDE下将关键函数重定向到RAM中执行的几种方法. 前段时间痞子衡写了一篇 <在IAR开发环境下将关键函数重 ...
- 痞子衡嵌入式:在MDK开发环境下将关键函数重定向到RAM中执行的几种方法
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在MDK开发环境下将关键函数重定向到RAM中执行的几种方法. 这个关键函数重定向到 RAM 中执行系列文章,痞子衡已经写过 <IA ...
- openswan中ISAKMP交互过程关键函数接口
1. ISAKMP交互过程中关键函数接口 下面分别说明不同的阶段和模式下的函数接口以及对应的报文. 2. 第一阶段(Phase I)主模式函数接口 发送端 响应端 main_outI1 主模式第一包 ...
- C++——STL之vector, list, deque容器对比与常用函数
STL 三种顺序容器的特性对比: vector 可变数组,内存空间是连续的,容量不会进行缩减.支持高效随机存取,即支持[]和at()操作.尾部插入删除效率高,其他位置插删效率较低: list 双向链表 ...
随机推荐
- React 从入门到进阶之路(九)
之前的文章我们介绍了 React propTypes defaultProps.接下来我们将介绍 React 生命周期函数. 之前我们已经根据 create-react-app 模块创建了一个 Re ...
- springcloud(一) 服务拆分
一般我们的项目如果需要从单应用服务升级到微服务,必须要将原来的服务做拆分,我这边的拆分也是基于将之前spb-demo的springboot单应用做拆分,拆分出三个应用,spb-brian-query- ...
- win32 指令大全
指令类型 助记符 (带*为特权指令) 对标志寄存器的影响 备注 说明 举例 ZF CF PF SF OF AF DF IF TF 数据传送类 数据传送 MOV 不影响标志位 Move MOV r/m3 ...
- 注册jdbc驱动的三种方式
java.sql.DriverManger类简介 java的驱动管理类.管理一组 JDBC 驱动程序. javax.sql.DataSource 接口是 JDBC 2.0 API 中的新增内容,它 ...
- HDU 2227 Find the nondecreasing subsequences dp思想 + 树状数组
http://acm.hdu.edu.cn/showproblem.php?pid=2227 用dp[i]表示以第i个数为结尾的nondecreasing串有多少个. 那么对于每个a[i] 要去找 & ...
- 更新项目,uwsgi重新加载和日志文件
uwsgi --reload /var/run/uwsgi.pid uwsgi.pid是uwsgi进程文件 /var/log/uwsgi.log
- 解决spring boot websocket
在网上找的demo写了一个小例子,本地开发测试都很正常,但是部署在tomcat就各种坑 1.MyWebSocket不要用spring 注解标注 2.main方法对应的类继承SpringBootServ ...
- AJPFX关于StringBuffer,StringBuilder类总结(二)
StringBuffer,StringBuilder类 总结2需要注意的知识点:1):// String -- >StringBuffer String s = "hel ...
- js dom node.children与node.childNodes区别
不同点:node.children不会取到节点下面的TextNode但是node.childNodes会取到 共同点:两者都是集合类数组,可以通过索引的方式取到值也可以用for循环遍历
- elasticsearch 2.4.0安装说明
首先从官网下载安装包,是个压缩文件,然后解压 在es目录下找到es的配置文件 修改集群(cluster)名称 PS:一般情况下一台机只部署一个es程序,也就是一个集群,默认集群名是ewater_mai ...