一、相关定义

set

  • 集合,有唯一性,即每一个元素只有一个;
  • 是一个有序的容器,里面的元素都是排序好的;
  • 支持插入,删除,查找等操作。

注意

  • set中的元素可以是任意类型的,但是由于需要排序,所以元素必须有一个序,即大小的比较关系,比如整数可以用“<”比较;
  • 不能直接改变元素值,因为那样会打乱原本正确的顺序,要改变元素值必须先删除旧元素,则插入新元素;

  • 不提供直接存取元素的任何操作函数,只能通过迭代器进行间接存取,而且从迭代器角度来看,元素值是常数;

  • 元素比较动作只能用于型别相同的容器(即元素和排序准则必须相同)。

二、set

【前提条件】

  • #include <set>
  • set<int> s;
  • set<int>::iterator it;

【自定义比较函数】

待续!

【基本操作】

begin()          返回指向第一个元素的迭代器

clear()           清除所有元素

count()          返回某个值元素的个数

empty()         如果集合为空,返回true

end()            返回指向最后一个元素的迭代器

erase()         删除集合中的元素

find()            返回一个指向被查找到元素的迭代器

insert()         在集合中插入元素

lower_bound()   返回指向大于(或等于)某值的第一个元素的迭代器

key_comp()      返回一个用于元素间值比较的函数

max_size()      返回集合能容纳的元素的最大限值

rbegin()        返回指向集合中最后一个元素的反向迭代器

rend()           返回指向集合中第一个元素的反向迭代器

size()             集合中元素的数目

swap()           交换两个集合变量

upper_bound()   返回大于某个值元素的迭代器

value_comp()    返回一个用于比较元素间的值的函数

三、代码实现

集合set插入/遍历用法举例

#include<iostream>
#include<set>
using namespace std;
//set插入元素操作
int main()
{
//定义一个int型集合对象s,当前没有任何元素
set<int> s;
s.insert(8); //第一次插入8,可以插入
s.insert(1);
s.insert(12);
s.insert(6);
s.insert(8); //第二次插入8,重复元素,不会插入
set<int>::iterator it; //定义前向迭代器
//中序遍历集合中的所有元素
for(it=s.begin();it!=s.end();it++)
cout<<*it<<endl;
system("pause");
return 0;
}

四、沙场练兵

题目:点击

代码:

#include <bits/stdc++.h>
using namespace std;
int main()
{
int i,j,k,n,x;
set<int> s;//定义一个名为s的集合
while(cin>>n)
{
for(int i=0;i<n;i++)
{
cin>>x;
if(s.empty())//判断集合s是否是空集
{
s.insert(x);//是的话向集合s插入一个元素x
}
else
{
set<int>::iterator it;//定义一个set型的迭代器
it=s.lower_bound(x);//进行二分查找
if(it==s.end())
{
s.insert(x);//插入一个元素x
}
else
{
s.erase(it);//删除制定元素it
s.insert(x);//插入一个元素x
}
}
}
int t=s.size();//集合s的大小
cout<<t<<endl;
}
return 0;
}

C++STL——set的更多相关文章

  1. 详细解说 STL 排序(Sort)

    0 前言: STL,为什么你必须掌握 对于程序员来说,数据结构是必修的一门课.从查找到排序,从链表到二叉树,几乎所有的算法和原理都需要理解,理解不了也要死记硬背下来.幸运的是这些理论都已经比较成熟,算 ...

  2. STL标准模板库(简介)

    标准模板库(STL,Standard Template Library)是C++标准库的重要组成部分,包含了诸多在计算机科学领域里所常见的基本数据结构和基本算法,为广大C++程序员提供了一个可扩展的应 ...

  3. STL的std::find和std::find_if

    std::find是用来查找容器元素算法,但是它只能查找容器元素为基本数据类型,如果想要查找类类型,应该使用find_if. 小例子: #include "stdafx.h" #i ...

  4. STL: unordered_map 自定义键值使用

    使用Windows下 RECT 类型做unordered_map 键值 1. Hash 函数 计算自定义类型的hash值. struct hash_RECT { size_t operator()(c ...

  5. C++ STL简述

    前言 最近要找工作,免不得要有一番笔试,今年好像突然就都流行在线笔试了,真是搞的我一塌糊涂.有的公司呢,不支持Python,Java我也不会,C有些数据结构又有些复杂,所以是时候把STL再看一遍了-不 ...

  6. codevs 1285 二叉查找树STL基本用法

    C++STL库的set就是一个二叉查找树,并且支持结构体. 在写结构体式的二叉查找树时,需要在结构体里面定义操作符 < ,因为需要比较. set经常会用到迭代器,这里说明一下迭代器:可以类似的把 ...

  7. STL bind1st bind2nd详解

    STL bind1st bind2nd详解   先不要被吓到,其实这两个配接器很简单.首先,他们都在头文件<functional>中定义.其次,bind就是绑定的意思,而1st就代表fir ...

  8. STL sort 函数实现详解

    作者:fengcc 原创作品 转载请注明出处 前几天阿里电话一面,被问到STL中sort函数的实现.以前没有仔细探究过,听人说是快速排序,于是回答说用快速排序实现的,但听电话另一端面试官的声音,感觉不 ...

  9. STL的使用

    Vector:不定长数组 Vector是C++里的不定长数组,相比传统数组vector主要更灵活,便于节省空间,邻接表的实现等.而且它在STL中时间效率也很高效:几乎与数组不相上下. #include ...

  10. [C/C++] C/C++延伸学习系列之STL及Boost库概述

    想要彻底搞懂C++是很难的,或许是不太现实的.但是不积硅步,无以至千里,所以抽时间来坚持学习一点,总结一点,多多锻炼几次,相信总有一天我们会变得"了解"C++. 1. C++标准库 ...

随机推荐

  1. [Linux/Unix]常用命令

    1.查看日志后200行有“TNS字符串的详细信息 file_name |grep TNS 实时查看文件情况: tail -f file_name 2.查看路由情况: #Linux环境 tracerou ...

  2. Python基础—06-函数基础

    函数基础 函数简介 定义:就是具有特定功能的一段代码 优点: 解决代码的重复书写 可以将功能的实现着和使用者分开,提高开发效率 分类: 库函数:print.input.abs等 自定义:用户自己封装的 ...

  3. Struts2中期(这框架目前正处于淘汰状态)

    Struts2的第二天 Struts2的第二天的内容 1. Struts2框架中的Servlet的API的使用 2. Struts2中Action接收请求参数 3. Struts2中自定义拦截器 案例 ...

  4. SQL3120W 不能将xx的字段值转换成 INTEGER值

    一次用DB2 Load/Import导入数据时,报错,提示SQL3120W 不能将xx的字段值转换成 INTEGER值,但目标列不可为空.未装入该行. 目标表: CREATE TABLE TEST( ...

  5. Co. - Microsoft - Windows - 通过任务计划,备份本地MySQL,数据上传Linux备份服务器

    需求 客户为Windows系统,安装MySQL,需要每日备份数据库到指定目录,并且上传到公司的备份服务器(Linux). 1.使用mysqldump备份MySQL数据库,使用FTP上传到阿里云Linu ...

  6. dynamic-insert和dynamic-update属性

    dynamic-insert  作用:设置对象中没有值的字段 insert并不会对其进行插入. 实体类映射配置如下 <!DOCTYPE hibernate-mapping PUBLIC &quo ...

  7. 【mysql学习笔记整理】

    /*mysql学习笔记整理*/ /*常用的数据库操作对象*/ #库的操作#创建#数据库的创建USE mysql;CREATE DATABASE db_x;#删除#删除数据库DROP DATABASE ...

  8. Asp.Net Core 使用Docker进行容器化部署(一)

    前几篇文章介绍了Liunx下的环境搭建,今天来分享一下.Net Core在Liunx上的部署. 我采用的方案是使用Dokcer作为运行虚拟机,Nginx作为Http服务器来进行反向代理,你可以理解为D ...

  9. ThinkPHP框架介绍

    什么是框架 php框架是许多代码的集合,这些代码的程序结构的代码(并不是业务代码)代码中有许多的函数,类,功能类包 不使用框架开发的缺陷 代码编写不规范 牵一发而动全身 不能很好满足客户各方面的需求 ...

  10. 004---Python基本数据类型--元祖

    元祖 .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px ...