STL中的set/multiset实操总结

  (1)使用set/multiset之前必须包含头文件<set>:#include<set> 

(2)namespace std{ 
template <class T, class Compare = less<T>, 
class Allocator = allocator<T> > 
class set; 
template <class T, class Compare = less<T>, 
class Allocator = allocator<T> > 
class multiset; 

只要是assignable、copyable、comparable的型别T都可以成为set或multiset的元素型别。 
set/multiset的排序准则必须是strict weak ordering其意义是:1必须是反对称的,对判断式op而言,如果op(x,y)为真则op(y,x)为假。2必须是可传递的,如果op(x,y)为真且op(y,z)为真则op(x,z)。3必须是非自反的,op(x,x)永远为假。 

(3)set/multiset通常都是以平衡二叉树来实现的,事实上set/multiset的实现版本大多以红黑树来实现,它保证节点安插时最多只会做两个重新连接动作,而且到达某一元素的最长路径最多只是最短路径深度的两倍。 

(4)set/multiset的操作函数: 
set c 产生一个空set/multiset 
set c(op) 以op为排序准则产生一个空set/multiset 
set c1(c2) 产生某一个set/multiset的副本 
set c(beg, end) 以区间[beg, end)内的元素产生一个set/multiset 
set c(beg, end, op) 以op为排序准则,以区间[beg, end)内的元素产生一个set/multiset 
c.~set() 销毁所有元素,释放内存 
其中set可为下列形式:set<Elem>、set<Elem, op>、multiset<Elem>、multiset<Elem, op> 

c.size() 返回当前的元素数量 
c.empty() 判断c是否为空 
c.max_size() 返回可容纳的元素最大数值 
c1 compare c2 compare可为==,!=,<,>,<=和>= 

c.count(elem) 返回“元素值为elem”的元素个数 
c.find(elem) 返回“元素值为elem”的第一个元素的迭代器,如果找不到就返回end() 
c.lower_bound(elem) 返回elem的第一个可安插位置,也就是“元素值>=elem”的第一个元素位置 
c.upper_bound(elem) 返回elem的最后一个可安插位置,也就是“元素值>elem”的第一个元素位置 
c.equal_range(elem) 返回elem的第一个和最后一个位置,也就是“元素值==elem”的第一个元素区间,返回值为将lower_bound()和upper_bound()的返回值做成一个pair返回 

c1 = c2 将c2全部元素赋值给c1 
c1.swap(c2) 将c1和c2元素互换 

c.begin() 返回一个双向存取迭代器(将元素视为常数),指向第一个元素 
c.end() 返回一个双向存取迭代器(将元素视为常数),指向最后元素的下一个位置 
c.rbegin() 返回一个逆向迭代器,指向逆向迭代的第一个元素 
c.rend() 返回一个逆向迭代器,指向逆向迭代的最后元素的下一个位置 

c.insert(elem) 插入一个elem副本并返回新元素的位置 
c.insert(it, elem) 安插elem副本返回新元素的位置(it是一个提示指出安插操作的搜寻起点) 
c.insert(beg, end) 插入区间[beg, end)内的所有元素副本,无返回值 
c.erase(elem) 移除“与elem相等”的所有元素,返回被移除元素的个数 
c.erase(it) 移除it位置上的元素,无返回 
c.erase(beg, end) 移除[beg, end)区间内的所有元素,无返回 
c.clear() 将容器清空 
set提供如下接口: 
pair<iterator, bool> insert(const value_type& elem); 
pair结构中的second成员表示安插是否成功;first成员返回新元素的位置或返回现存的同值元素位置 
iterator insert(iterator pos_hint, const value_type& elem); 
multiset提供如下接口: 
iterator insert(const value_type& elem); 
iterator insert(iterator pos_hint, const value_type& elem);

时间: 2024-09-28 22:49:28

STL中的set/multiset实操总结的相关文章

中国铁通一分为二进入实操阶段

商报讯 (记者 毛涛涛 吴辰光)备受关注的中国铁通分拆计划昨日进入实操阶段,这也意味着从去年5月开始的新一轮电信市场重组正式收官.此前,中国电信刚刚完成对原中国卫通基础电信业务的整合. 经过此次业务划转,中国铁通被一分为二,其中与铁路通信相关的业务划转至铁道部门,包括铁路运输生产专用电话.站车广播.铁路专用数据通信等业务:此外,中国铁通的固话及宽带等经营业务划分为中国移动所有. 中国移动总裁王建宙昨日表示,此次交割对铁路通信和中国铁通都是有益的举措.他还表示,因为中国铁通仍在亏损中,中国移动上市

传统企业开展网络营销如何在实操中转变思维

中介交易 SEO诊断 淘宝客 云主机 技术大厅 传统企业的运营思维与一般的互联网营销思维有一个很大的差异,简单来说,传统企业运营的思路和模式是以产品为导向,而互联网营销是以顾客为导向,流程截然相反. 比如,一般传统企业,尤其是工业企业,往往是以产品为中心的,非常讲求他们的技术和产品的功能,将自己产品所具备的功能和优点全部罗列出来,如数家珍,然后去找顾客,看哪些人需要,能够卖给谁.这从他们的网站和企业画册可以很明显地看出来,不论是面向终端顾客,还是经销商的项目,以及在各领域的应用一应俱全,接下来也

新站实操:疯狂外链与定向投稿的不同性

经过1个月的建站时间,我用两个网站通过不同的方式去推广,至今天观察,似乎已经开始向稳定收录迈进.现在我来说一说我两个网站这一个月的操作经验. 第一个网站:垃圾外链法 先说说第一个网站的基本情况:域名在7月12日购买,已经备/*-案的域名,一周后正式上线,期间改动过title.关键词.内容数次,但是都是在没收录的情况下改动的.该站从建站开始,我进行了一部分采集,但是采集的资源都是百度没有收录的文章,总计400余篇.可以说是个90%的原创网站了. SEO情况:之后每天一篇原创(来自网络,百度没有的)

实操 Web Cache

实操 Web Cache http://netkiller.github.io/journal/cache.html Mr. Neo Chen (netkiller), 陈景峰(BG7NYT) 中国广东省深圳市龙华新区民治街道溪山美地518131+86 13113668890+86 755 29812080<netkiller@msn.com> $Id$ 版权 2011, 2012, 2013, 2014 http://netkiller.github.io $Date$ 摘要 写这篇文章的原

【转载】Docker助你攻克数据库难题,原来数据库还可以这么操作!(附实操教程)

写在前面 Microsoft SQL Server 2017首次应用于Windows.Linux 和Docker 容器中.如今在容器中,您的数据库只需要花费很短的时间就可以完成安装并且不再需要其它的安装环境,使用Docker 企业版(EE)会让你的数据库交付变得更具现代化.多年来IT人员和开发人员一直享受Docker 和容器化APP所带来的这种速度和效率的优势,现在,DBAs也可以体验到这种快感了. 开启挑战 尝试登录Docker SQL Server lab(实操教程链接:https://gi

电改步入实操 “电改”成两会热议能源关键词

随着3月15日上午李克强总理记者会的结束,轰轰烈烈的2017年全国两会正式落下了帷幕.在过去的半个月内,去产能.环保.新电改."三弃"等攸关能源行业发展战略的问题不断被各个行业的两会代表和委员们提及,话题持续发酵,热度不断升温. 关键词1:煤炭去产能 政府工作报告中明确提出,今年要退出煤炭产能1.5亿吨以上,同时,要淘汰.停建.缓建煤电产能5000万千瓦以上,以防范化解煤电产能过剩风险,提高煤电行业效率,为清洁能源发展腾空间. 全国政协委员.国家发改委副主任.国家统计局局长宁吉喆表示,

STL中map与hash_map容器的选择收藏

这篇文章来自我今天碰到的一个问题,一个朋友问我使用map和hash_map的效率问题,虽然我也了解一些,但是我不敢直接告诉朋友,因为我怕我说错了,通过我查询一些帖子,我这里做一个总结!内容分别来自alvin_lee ,codeproject,codeguru.baidu等等! 先看看alvin_lee 朋友做的解析,我觉得还是很正确的,从算法角度阐述了他们之间的问题! 实际上这个问题不光C++会遇到,其他所有语言的标准容器的实现及选择上都是要考虑的.做应用程序你可能觉得影响不大,但是写算法或者核

io流-java问题:学习IO流课程的Filewriter时遇到了实操跟老师所讲,并不一致的情况

问题描述 java问题:学习IO流课程的Filewriter时遇到了实操跟老师所讲,并不一致的情况 老师讲课时说,要在我下图的箭头那个位置多写个",true",代表数据追加,以此可以分批次writer数据到文件里,否则新数据会覆盖前面的旧数据,视频演示时的确也符合他的这个说法,但我下来自己练习时发现,不用加true它自己就会追加数据耶?这是怎么回事,用的软件版本都是一样的,怎么会和教程里不同 解决方案 1楼说的没错,不知你谁否已经理解. 调用一次new Filewriter("

微信朋友圈营销30天实操手记:微信卖枸杞案例总结

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 9月7日-10月15日,借助微信朋友圈营销,卖了38988元的枸杞.3600多元的蜂蜜,合计42588元零售额!这就是大雨和蝴蝶(hd12306),借助微信做朋友圈营销,实战30天的可量化结果! 之前看<赢在中国蓝天碧水间>,记得马云在点评碧水队失败的时候说过一句话:"我们赢,要思考我们侥幸在哪里!我们输,要思考我们哪些