STL之 set简略介绍。

set常用函数及其讲解 

  1.  构造set集合的主要目的是为了快速检索,使用set前,需要在程序头文件中包含声明“#include<set>”。
  2.  set集合容器实现了红黑树(Red-Black Tree)的平衡二叉检索树的的数据结构,在插入元素时,它会自动调整二叉树的排列,把该元素放到适当的位置.例如会将数字进行从小到大的默认排序,将string按字典顺序自动排列。
  3.  创建集合对象。 创建set对象时,需要指定元素的类型,这一点和其他容器一样.
  4. 采用inset()方法把元素插入到集合中(set像集合中容器中放入元素只有inset()),插入规则在默认的比较规则下,是按元素值从小到大插入,如果自己指定了比较规则函数,则按自定义比较规则函数插入。使用前向迭代器对集合中序遍历,结果正好是元素排序后的结果。
  5. 元素的方向遍历。 使用反向迭代器reverse_iterator可以反向遍历集合,输出的结果正好是集合元素的反向排序结果。它需要用到rbegin()和rend()两个方法,它们分别给出了反向遍历的开始位置和结束位置。
    #include<iostream>
    #include<set>
    using namespace std;
    int main()
    {set<int> s;s.insert(5); //第一次插入5,可以插入s.insert(1);s.insert(6);s.insert(3);s.insert(5); //第二次插入5,重复元素,不会插入set<int>::iterator it; //定义前向迭代器//中序遍历集合中的所有元素for(it = s.begin(); it != s.end(); it++){cout << *it << " ";}cout << endl;return 0;
    }
    //运行结果:1 3 5 6
  6. 元素的删除

            与插入元素的处理一样,集合具有高效的删除处理功能,并自动重新调整内部的红黑树的平衡(集合内部元素的排序)。删除的对象可以是某个迭代器位置上的元素、等于某键值的元素、一个区间上的元素和清空集合。

    #include<iostream>
    #include<set>
    using namespace std;
    int main()
    {set<int> s;s.insert(5); //第一次插入5,可以插入s.insert(1);s.insert(6);s.insert(3);s.insert(5); //第二次插入5,重复元素,不会插入      集合内部:1 3 5 6s.erase(6); //删除键值为6的元素                   集合内部:1 3 5set<int>::reverse_iterator rit; //定义反向迭代器   //反向遍历集合中的所有元素for(rit = s.rbegin(); rit != s.rend(); rit++){cout << *rit << " ";}cout << endl;	set<int>::iterator it;it = s.begin();for(int i = 0; i < 2; i++)it = s.erase(it);      //将 1 3删除for(it = s.begin(); it != s.end(); it++)cout << *it << " ";cout << endl;s.clear(); //将集合清空cout << s.size() << endl; //输出集合的大小,即元素个数return 0;
    }
    /*
    运行结果:
    5 3 1
    5
    0    
    */

     

  7. 自定义比较函数。使用insert将元素插入到集合中去的时候,集合会根据设定的比较函数奖该元素放到该放的节点上去。在定义集合的时候,如果没有指定比较函数,那么采用默认的比较函数,即按键值从小到大的顺序插入元素。但在很多情况下,需要自己编写比较函数。

  8. 编写比较函数有两种方法。

  9. (1)如果元素不是结构体,那么可以编写比较函数。下面的程序比较规则为按键值从大到小的顺序插入到集合中。

#include<iostream>
#include<set>
using namespace std;
struct mycomp
{                                                 //自定义比较函数,重载“()”操作符bool operator() (const int &a, const int &b){if(a != b)return a > b;elsereturn a > b;}
};
int main()
{set<int, mycomp> s; //采用比较函数mycomps.insert(5); //第一次插入5,可以插入s.insert(1);s.insert(6);s.insert(3);s.insert(5); //第二次插入5,重复元素,不会插入set<int,mycomp>::iterator it;for(it = s.begin(); it != s.end(); it++)cout << *it << " ";cout << endl;return 0;
}
/*
运行结果:6 5 3 1  
*/

(2)如果元素是结构体,那么可以直接把比较函数写在结构体内。 

  1. #include<iostream>
    #include<set>
    #include<string>
    using namespace std;
    struct Info
    {string name;double score;bool operator < (const Info &a) const // 重载“<”操作符,自定义排序规则{//按score由大到小排序。如果要由小到大排序,使用“>”即可。return a.score < score;}
    };
    int main()
    {set<Info> 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>::iterator it;for(it = s.begin(); it != s.end(); it++)cout << (*it).name << " : " << (*it).score << endl; return 0;
    }
    /*
    运行结果:
    Tom : 99
    Jack : 80
    Steaven : 60
    */
    

     

部分内容选自 :https://blog.csdn.net/alibaba_lhl/article/details/81151409

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/441994.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 按时间查询优化_mysql如何按时间查询优化

mysql按时间查询优化的方法&#xff1a;1、【register_time】字段是datetime类型&#xff0c;转换为日期再匹配&#xff0c;需要查询出所有行进行过滤&#xff1b;2、可以利用在【register_time】字段上建立索引&#xff0c;查询极快。本教程操作环境&#xff1a;windows7系统、…

【HDU - 5688 】Problem D(STL+map)

题干&#xff1a; 度熊所居住的 D 国&#xff0c;是一个完全尊重人权的国度。以至于这个国家的所有人命名自己的名字都非常奇怪。一个人的名字由若干个字符组成&#xff0c;同样的&#xff0c;这些字符的全排列的结果中的每一个字符串&#xff0c;也都是这个人的名字。例如&am…

列举python中常用的数据类型_Python基础知识 变量和简单数据类型

在本章节中&#xff0c;将介绍Python程序中会使用到的各种数据类型&#xff0c;以及如何在程序中使用变量来表示这些数据。其中用到的一些例子均来自《Python编程从入门到实践 第2版》。一、变量1. 变量是标签变量是可以赋给值的标签&#xff0c;也可以说变量指向特定的值。mes…

【HDU - 1412】 {A} + {B} (STL + set)

题干&#xff1a; 给你两个集合&#xff0c;要求{A} {B}. 注:同一个集合中不会有两个相同的元素. Input 每组输入数据分为三行,第一行有两个数字n,m(0<n,m<10000),分别表示集合A和集合B的元素个数.后两行分别表示集合A和集合B.每个元素为不超出int范围的整数,每个元…

angularjs 开发流程_超级棒的30款web前端开发工具汇总,一定要收藏!

我们与企业内部的Web开发团队进行了很多次交流&#xff0c;研究了很长时间&#xff0c;最后将Debug工具与Web前端开发工具整理汇总在了一起&#xff0c;这些工具对每个Web开发人员都非常有用。这些工具将使您的工作更加轻松&#xff0c;特别是如果您是Web开发人员&#xff0c;W…

*【HDU - 4006】 The kth great number(优先队列 or 线段树)

题干&#xff1a; Xiao Ming and Xiao Bao are playing a simple Numbers game. In a round Xiao Ming can choose to write down a number, or ask Xiao Bao what the kth great number is. Because the number written by Xiao Ming is too much, Xiao Bao is feeling giddy…

linux mysql io压力大_MySQL 调优基础(四) Linux 磁盘IO_MySQL

1. IO处理过程磁盘IO经常会成为系统的一个瓶颈&#xff0c;特别是对于运行数据库的系统而言。数据从磁盘读取到内存&#xff0c;在到CPU缓存和寄存器&#xff0c;然后进行处理&#xff0c;最后写回磁盘&#xff0c;中间要经过很多的过程&#xff0c;下图是一个以write为例的 Li…

mysql可以存储标点么_MySQL查询(进阶)(每个标点都是重点)

MySQL 是工作中很普遍的需要用到的,所以必须掌握,而 之前我们一直说的都是怎么存.你只会存不会取有个屁用.所以希望大家在如何查询读取数据这方面多下点功夫.这篇和上一篇都是干货,我也是第一次学.反正我就是这样理解,这样一遍一遍写,一遍一遍看的才慢慢有点感觉的.目前还整理的…

【HDU - 1263】 水果(STL)

题干&#xff1a; 夏天来了~~好开心啊,呵呵,好多好多水果~~ Joe经营着一个不大的水果店.他认为生存之道就是经营最受顾客欢迎的水果.现在他想要一份水果销售情况的明细表,这样Joe就可以很容易掌握所有水果的销售情况了. Input 第一行正整数N(0<N<10)表示有N组测试数…

mysql死锁的排查方法_MySQL死锁系列-线上死锁问题排查思路

前言MySQL 死锁异常是我们经常会遇到的线上异常类别&#xff0c;一旦线上业务日间复杂&#xff0c;各种业务操作之间往往会产生锁冲突&#xff0c;有些会导致死锁异常。这种死锁异常一般要在特定时间特定数据和特定业务操作才会复现&#xff0c;并且分析解决时还需要了解 MySQL…

ACM - 欧拉函数(内容)

欧拉函数 &#xff1a; 欧拉函数是数论中很重要的一个函数&#xff0c;欧拉函数是指&#xff1a;对于一个正整数 n &#xff0c;小于 n 且和 n 互质的正整数&#xff08;包括 1&#xff09;的个数&#xff0c;记作 φ(n) 。 完全余数集合&#xff1a; 定义小于 n 且和 n 互质的…

分布式锁和mysql事物扣库存_浅谈库存扣减和锁

先说场景:物品W现在库存剩余1个, 用户P1,P2同时购买.则只有1人能购买成功.(前提是不允许超卖)秒杀也是类似的情况, 只有1件商品,N个用户同时抢购,只有1人能抢到..这里不谈秒杀设计,不谈使用队列等使请求串行化,就谈下怎么用锁来保证数据正确.常见的实现方案有以下几种:1.代码同…

【POJ - 2631 】Roads in the North(树的直径)

题干&#xff1a; Building and maintaining roads among communities in the far North is an expensive business. With this in mind, the roads are build such that there is only one route from a village to a village that does not pass through some other village…

齐博php百度编辑器上传图片_php版百度编辑器ueditor怎样给上传图片自动添加水印?...

百度ueditor是广泛使用的所见即所得图文排版编辑插件&#xff0c;功能比较完善&#xff0c;美中不足就是不支持自动加水印。万维景盛工程师搜集到php版ueditor自动加水印的教程&#xff0c;希望对大家有帮助。1.打开ueditor目录下的php目录下的config.json 文件在上传配置项添加…

【HDU - 1285】确定比赛名次 (拓扑排序)

题干&#xff1a; 有N个比赛队&#xff08;1<N<500&#xff09;&#xff0c;编号依次为1&#xff0c;2&#xff0c;3&#xff0c;。。。。&#xff0c;N进行比赛&#xff0c;比赛结束后&#xff0c;裁判委员会要将所有参赛队伍从前往后依次排名&#xff0c;但现在裁判委…

mysql dql_Mysql中的DQL查询语句

欢迎进入Linux社区论坛&#xff0c;与200万技术人员互动交流 >>进入 Mysql中的DQL查询语句 1、查询所有列 --查询 学生 表所有记录(行) select *from 学生 --带条件的查询 select *from 学生 where 年龄19 2、查询指定的列 --查询 所有人的姓名和性别 select 姓名,性欢迎…

【POJ - 1028】 Web Navigation( 栈 or 模拟队列 )

题干&#xff1a; Standard web browsers contain features to move backward and forward among the pages recently visited. One way to implement these features is to use two stacks to keep track of the pages that can be reached by moving backward and forward. …

python循环post请求_循环post请求太多

我正在做一个scrapy spider&#xff0c;我必须发送一个post请求循环才能转到下一个页面&#xff0c;问题是它只发送一个post请求。querystring更改每个页面的元素“currentPage”&#xff0c;因此我必须为每个页面更改此键的值并发送post。但是&#xff0c;正如我之前所说&…

【POJ - 2387】 Til the Cows Come Home(单源最短路Dijkstra算法)

题干&#xff1a; Bessie is out in the field and wants to get back to the barn to get as much sleep as possible before Farmer John wakes her for the morning milking. Bessie needs her beauty sleep, so she wants to get back as quickly as possible. Farmer Jo…

递归Java_递归的Java实现

递归是一种应用非常广泛的算法(或者编程技巧)。递归求解问题的分解过程&#xff0c;去的过程叫“递”&#xff0c;回来的过程叫“归”。递归需要满足的三个条件&#xff1a;1. 一个问题的解可以分解为几个子问题的解&#xff1b;2. 这个问题与分解之后的子问题&#xff0c;除了…