STL set multiset
STL容器大的方向分为两类,序列式容器和关联式容器。
这两者通过数据在容器内的排列来区分。关联容器和顺序容器的根本不同在于:关联容器中的元素是按关键字来保存和访问的,而顺序容器中的元素则是按它们在容器中的位置来顺序保存和访问的。
序列容器包括:vector、list、stack、queue、priority_queue 等
关联容器包括:set、multiset、map 等
SET && MULTISET
关于set,必须说明的是set关联式容器。set作为一个容器也是用来存储同一数据类型的数据类型,并且能从一个数据集合中取出数据,在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序。应该注意的是set中数元素的值不能直接被改变。
定义 set<int> s;
定义 multiset<int> ss; multiset 里面允许有重复的数字,且按照顺序排列
s.insert() 插入元素
s.begin() 返回set容器第一个元素的地址
s.end() 返回set容器的最后一个元素地址
s.size() 返回当前set容器中的元素个数
s.clear() 删除set容器中的所有的元素
s.empty() 判断set容器是否为空
s.rbegin() 返回的值和end()相同
s.rend() 返回的值和rbegin()相同
#include <iostream>
#include <set>using namespace std;int main ()
{//定义 set<int> s;//插入 int cnt = 10,x;while(cnt--){cin >> x;s.insert(x); }//迭代器 set<int>::iterator it;//输出 ,遍历 for(it=s.begin();it!=s.end();it++){cout << *it << " "; } cout << endl; //s.size()返回容器中的元素个数 cout << "一共有" <<s.size() << "个元素\n" ;//10s.clear();if(s.empty()==1){cout << "set 为空 !\n";}cout << "s.clear()之后,一共有" <<s.size() << "个元素\n" ;//0return 0;
}
s.count() :这个是看在set种出现的次数,但是在set里没有重复的元素,所以只可能是0和1,所以用来判断是不是set中的元素
s.find():用来查找set中某个元素出现的位置。如果找到,就返回这个元素的迭代器,如果这个元素不存在,则返回 s.end() 。 (最后一个元素的下一个位置,s为set的变量名)
#include <iostream>
#include <set>using namespace std;int main ()
{set<int> s;//插入 s.insert(10);s.insert(10);s.insert(20);s.insert(30);//遍历set<int>::iterator it;cout << "10出现的次数:" << s.count(10) << endl; cout << "20出现的次数:" << s.count(20) << endl; return 0;
}
#include <iostream>
#include <set>using namespace std;int main ()
{set<int> s;//插入 s.insert(10);s.insert(10);s.insert(20);s.insert(30);//遍历set<int>::iterator it;it = s.find(30);if(it==s.end())cout << "没找到!";elsecout << "找到" << *it; return 0;
}
erase(iterator) ,删除定位器iterator指向的值
erase(first,second),删除定位器first和second之间的值
erase(key_value),删除键值key_value的值
小结:set中的删除操作是不进行任何的错误检查的,比如定位器的是否合法等等,所以用的时候自己一定要注意。
#include <iostream>
#include <set>using namespace std;int main ()
{set<int> s;set<int>::iterator it;set<int>::iterator first,second; for(int i=1;i<=20;i++)s.insert(i);//删除 1 s.erase(s.begin());//删除2-4之间的数 (不包括4) first=s.begin();//2 second=s.begin();second++;second++; s.erase(first,second);s.erase(10);//10for(it=s.begin();it!=s.end();it++){cout << *it <<" ";}//输出:4 5 6 7 8 9 11 12 13 14 15 16 17 18 19 20 return 0;
}
lower_bound(key_value) ,返回第一个大于等于key_value的定位器
upper_bound(key_value),返回最后一个大于等于key_value的定位器
#include <iostream>
#include <set> using namespace std; int main()
{ set<int> s; s.insert(1); s.insert(3); s.insert(4); s.insert(5);cout<<*s.lower_bound(2)<<endl; //3cout<<*s.lower_bound(3)<<endl; //3cout<<*s.upper_bound(3)<<endl; //4return 0;
}
SET 自定义排序
set 里默认为less 函数,从小到大
#include <iostream>
#include <set>
#include <string>using namespace std;struct cmp
{bool operator() (const int &a ,const int &b) const{return a>b;}
};int main()
{set<int,cmp> s;for(int i=1;i<=20;i++){s.insert(i);}set<int,cmp>::iterator it;for(it=s.begin();it!=s.end();it++){cout << *it << " ";}return 0;
}
//输出:20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
#include <iostream>
#include <set>
using namespace std;int main()
{set<int,greater<int> > s;for(int i=1;i<=20;i++){s.insert(i);}set<int,greater<int> >::iterator it;for(it=s.begin();it!=s.end();it++){cout << *it << " ";}return 0;
}
结构体+set+排序:
#include<iostream>
#include<set>
#include<string>
using namespace std;
struct Info
{string name;double score;
};struct cmp
{bool operator () (const Info &a,const Info &b) const // 重载“<”操作符,自定义排序规则{//按score由大到小排序。//如果是由小到大排序则是 < return a.score > b.score;}
};int main()
{set<Info,cmp> s;Info info;//插入三个元素info.name = "Jack";info.score = 80;s.insert(info);info.name = "Tom";info.score = 99;s.insert(info);info.name = "Steaven";info.score = 60;s.insert(info);set<Info,cmp>::iterator it;for(it = s.begin(); it != s.end(); it++)cout << (*it).name << " : " << (*it).score << endl; return 0;
}
/*
运行结果:
Tom : 99
Jack : 80
Steaven : 60
*/
struct Info
{string name;double score;friend bool operator < (Info a,Info b) // 重载“<”操作符,自定义排序规则{//按score由大到小排序。//如果是由小到大排序则是 < return a.score > b.score;}
};
struct Info
{string name;double score;bool operator < (const Info & a) const{return score > a.score;}
};
相关文章:

Windows 消息循环(1) - 概览
本文从消息循环是如何驱动程序的这个角度,对 Windows 消息循环进行概览性介绍。 使用 EN5 课件获得更好的阅读体验: 【希沃白板5】课件分享 : 《Windows培训 - 消息循环》https://r302.cc/q2d1jB 点击链接直接预览课件 1 程序是怎么跑起来的?…

得到的旋转向量和平移向量转换成旋转矩阵 (SE(3))
理论过程 头文件说明 1.使用罗德里格斯公式需要包含头文件为#include<opencv2/calib3d.hpp> 2.使用函数cv2eigen需要包含头文件<opencv2/core/eigen.hpp>,但是在则之前要包含一个对eigen定义的头文件,否则会报eigen.hpp文件的错,…

[译稿]同步复制提议 2010-09
2019独角兽企业重金招聘Python工程师标准>>> 同步复制9/2010议案 目录 [隐藏] 1 PAGE状态 2 有何不同之处这个补丁? 3 同步复制概述 4 用户视角 4.1 管理员视角 5 实现 5.1 STANDBY 5.2 MASTER 6 CODE 7 性能分析 8 尚未实现 9 ,其他问题 PAG…
STL vector
1、vector是表示可变大小数组的序列容器。 2、就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会…

JavaScript 复习之数据类型
一、简介 JavaScript 的数据类型有 7 种: 数值(number)字符串(string)布尔值(boolean)undefinednull对象(object)Symbol(ES6 中新增的类型,表示独…

Nginx反代配置
一、ngx_http_proxy_module模块ngx_http_proxy_module模块可根据用户请求的uri传递至后端服务器,实现反向代理命令:1.proxy_pass设置一个代理服务器的地址,协议,和一个可选的URI的位置应该映射。作为一个协议,“HTTP”…
STL queue priority_queue
queue 队列 queue 队列 就像排队一样,后来的排在后面,先来的先出队。所以只能对队首和队尾的元素进行操作 back()返回最后一个元素empty()如果队列空则返回真front()返回第一个元素pop()删除第一个元素push()在末尾加入一个元素size()返回队列中元素的…
镜头评价指标及测试方法(二)—畸变与分辨率
一、畸变 畸变(distortion)也称为失真,是由于光阑球差的影响,不同视场的主光线通过光学系统后与高斯像面的交点高度不等于理想像高,两者之差就是畸变。因此畸变只改变轴外物点在理想面上的成像位置,使像的形…
优秀Java程序员应该知道的20个实用开源库
一个优秀且经验丰富的Java开发人员的特点之一是对API的广泛了解,包括JDK和第三方库。我花了很多时间学习API,特别是在阅读Effective Java 3rd Edition之后,Joshua Bloch建议如何使用现有的API进行开发,而不是为常用的东西写新的代…

sersync 同步
Sersync数据同步rsync是类unix系统下的数据镜像备份工具——remote sync。一款快速增量备份工具 Remote Sync,远程同步支持本地复制,或者与其他SSH、rsync主机同步。它的特性如下:v 可以镜像保存整个目录树和文件系统。v 可以很容易做到保持原…

python-opencv 形态学
五、形态学运算 检测边和 角点 形态学算子检测图像中的边缘和拐角(实际用:Canny或Harris等算法) 5.1 检测边缘 形态学检测边缘的原理:在膨胀时,图像中的物体会想周围“扩张”;腐蚀时,图像中的物…

【 HihoCoder】1082 The Marshtomp has seen it all before (暴力 或 脑力)
https://vjudge.net/problem/HihoCoder-1082 暴力 #include <iostream> #include <cstring>using namespace std;char s[205];int main() {int i;while(gets(s)){i 0;int len strlen(s);while(i<len){if((s[i]m||s[i]M)&&(s[i1]a||s[i1]A)&&am…

java 多维数组转化为字符串
int[][] a {{1,2,3},{4,5,7}};System.out.println(Arrays.deepToString(a)); Arrays.deepToString()此方法是为了将多维数组转换为字符串而设计的。 三维二维都可以解决;转载于:https://www.cnblogs.com/lishuaiqi/p/10428612.html

python-opencv 轮廓检测
轮廓检测 图像处理中经常用到轮廓检测,OpenCV-python接口中使用cv2.findContours()函数来查找检测物体的轮廓。 import cv2img cv2.imread(D:\\test\\contour.jpg) gray cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) ret, binary cv2.threshold(gray,127,255,cv2.THRESH_BINARY)…

JavaDate类
在JDK1.0中,Date类是唯一的一个代表时间的类,但是由于Date类不便于实现国际化,所以从JDK1.1版本开始,推荐使用Calendar类进行时间和日期处理。这里简单介绍一下Date类的使用。1、使用Date类代表当前系统时间Date d new Date();Sy…
Jupyter Notebook使用教程
1、启动 在终端中输入以下命令: jupyter notebook --allow-root执行命令之后,在终端中将会显示一系列notebook的服务器信息,同时浏览器将会自动启动Jupyter Notebook。 启动过程中终端显示内容如下: $ jupyter notebook [I 08…

一次性理清JavaScript变量等高难度面试问题
主要是解决JavaScript中比较难懂的部分,当然了,这部分经常在面试题中露面,这篇文章主要是讲解解题思路,对新手会有很大帮助(如果你仔细看的话)。书籍方面,我看的是《你不知道的javascript》,精髓…

yolov3(一:模型训练)
第一部分:训练已有的voc datasets 搞清楚该算法的模型训练流程 Darknet是Joseph维护的开源的神经网络框架,使用C语言编写:https://pjreddie.com/darknet/yolo/ Darknet快速,易于安装,同时支持CPU和GPU计算࿱…

Ios生产证书申请(含推送证书)
一、Mac机上生成请求文件。 Mac机上点击证书助手 > 从证书颁发机构请求证书 > 得到CertificateSigningRequest.certSigningRequest请求文件(此请求证书建议一直保存,因为根证书的生成需要使用此请求文件,根证书多个app可以使用一个&…
【Python】SyntaxError: unexpected EOF while parsing
找到错误的地方是 少打了半个括号 emmm 1、可能是语法问题,需要自己检查代码 2、可能是用python2.7来运行python3.0的代码不兼容
华为云家庭视频监控帮你一起守护家
设想一下?离开家了突然想起家里空调没关怎么办?家里没人有陌生人入侵了怎么办?不在家家里老人出事了怎么办? 不用愁,总有办法解决的,这些日常生活中极容易遇到的事情,没有分身术的时候ÿ…
SLAM之特征匹配(三)————RANSAC------LO-RANSAC Algorithm
matlab 编译loransac,lapack mex ranH.c时一直链接错误。 原来mex在编译多个文件时要把所有的C文件都列出来。命令如下: mex loransacH.mex.c ranH.c utools.c Htools.c lapwrap.c matutl.c rtools.c -ID:\lapack\headers\lapack -LD:\lapack - lcbia.l…

【Codeforces】1136C Nastya Is Transposing Matrices (矩阵转置)
http://codeforces.com/contest/1136/problem/C 第一个矩阵可否通过转置,变换成第二个矩阵,可以的话输出“YES”,不可以的话,输出“NO” 转置之后,对角线元素是不变的 用map,或者vector 都可以 #includ…

linux基础篇-02,linux时间管理date hwclock cal 简述
################################################时间管理1,date:系统时钟查看当前系统时间[rootJameszhan etc]# date2016年 11月 14日 星期一 20:16:37 CST################################################设定系统时间 2016年 07月 20日 星期三 10:30:00 CST…

Spark shuffle调优
Spark shuffle是什么Shuffle在Spark中即是把父RDD中的KV对按照Key重新分区,从而得到一个新的RDD。也就是说原本同属于父RDD同一个分区的数据需要进入到子RDD的不同的分区。现在的spark版本默认使用的是sortshuffle;shuffle在哪里产生shuffle在spark的算子中产生,也就…

多传感器融合之滤波(一)——卡尔曼滤波(KF)推导
c参考资料:https://www.bzarg.com/p/how-a-kalman-filter-works-in-pictures/ 卡尔曼滤波本质上是一个数据融合算法,将具有同样测量目的、来自不同传感器、(可能) 具有不同单位 (unit) 的数据融合在一起,得到一个更精确的目的测量值。 卡尔…

【HDU】1284 钱币兑换问题 (想一想)
http://acm.hdu.edu.cn/showproblem.php?pid1284 除以三,看最多能放多少个三分的硬币,加一表示全部都是一分的硬币着一种情况。之后用一个循环看一下,有多少种情况 因为确定了有几个三分,有几个两分,一分的也就自然…

抓取网页的脚本 【修复】
之前张耀老师的网页脚本由于51cto升级,课程列表页面改用javascript失效了笔者发现视频课程页面右边的列表都为静态化后的视频课程地址,遂将老师初始版本的脚本进行了修改,在对视频课程页面使用时结果正常,遂将及修改后的脚本和部分…

实例规格 ECS (共享计算型)和 (通用型-原独享)性能上有什么区别?...
实例规格 ECS (共享计算型)和 (通用型-原独享)性能上有什么区别? 实例规格 共享计算型 和 通用型(原独享), 如果同样是2核4G 或者4核8G ; 性能上有什么差异/差距大吗? 内存型比通用性性能好些,而且CPU和内存配比: 通用型为1:2&…

yolov3(二:车牌识别)
0.按照:https://blog.csdn.net/Darlingqiang/article/details/103889245步骤训练自己的模型 1.下载[data.zip]:链接: https://pan.baidu.com/s/1NahLmB5YajUJT_Gk1OgN7A 提取码: 8888 2.进入data/voc目录下运行voc_label.bat重新生成2019_train.txt, 201…