当前位置: 首页 > news >正文

set/multiset容器

set容器基本概念

  • set容器中的所有元素在插入后都会自动被排序

  • set/multiset容器属于关联式容器,底层结构是用二叉树实现
    (关联式容器是指通过键索引元素值,在set容器中元素值即为键。与关联式容器对应的是序列式容器,包括vector,list等等,这些容器是通过位置索引访问数据。)

set容器的构造和赋值

  • 构造:
set<T> st//默认构造函数
set(const set& st)//拷贝构造函数
  • 赋值:
set& operator=(const set& st)//重载等号运算符

set容器的大小和交换

int size();//返回容器中数据的个数
bool empty();//判断容器是否为空
void swap(const set& st);//交换两个容器的数据

set容器元素的插入和删除

pair<iterator, bool> insert(value);//插入指定元素vlaue
void clear();//清除容器内的所有元素
iterator erase(pos);//删除指定位置的元素,返回下一个元素的迭代器
iterator erase(beg, end);//清除该区间内的元素(左闭右开)
int erase(value);//清除值为value的元素,返回删除的元素的个数(在set容器中只能为0或1)

因为set容器会对元素自动排序,所以插入元素的函数只有 insert 函数

set容器查找和统计

itreator find(value);//查找值为value的元素,若存在则返回其迭代器,若不存在则返回set.end()
int count(vlaue);//统计容器中值为value的元素的个数,在set容器中只能为0或1

set和multiset容器的区别

  • set容器不可以插入重复的数据 multiset容器可以
  • set容器的insert函数除了返回插入的数据的迭代器还会返回是否插入成功,而multiset容器不会检测插入的数据(因此可以插入重复的元素) 它的insert函数的只会返回插入元素的迭代器

pair对组

利用队组可以返回成对的数据


set容器的insert函数的返回值即为pair类型(pair<set<T>, bool>),同时返回了插入元素的迭代器和是否插入成功,如果有重复元素未能成功插入则迭代器会返回容器中已有元素的迭代器。

对组的创建

//两种创建方式
pair<type, type> p (value1, value2);
pair<type, type> p = make_pair(value1, value2);
//通过p.first p.second即可访问value1和value2

set容器排序

通过仿函数,我们可以改变set容器的排序规则(set容器默认从小到大排序)


同样 也可以通过仿函数为自定义数据类型排序

仿函数的定义

简单来说,仿函数就是一个行为像函数的对象 这是因为它的本质是一个重载了()运算符的类或者结构体,所以可以像函数一样被调用(用 ‘对象名(参数)’的形式)

class myCompare
{
public:bool operator() (int v1, int v2){return v1 > v2;}
};void test01()
{set<int, myCompare> s;s.insert(10);s.insert(20);s.insert(30);s.insert(40);s.insert(50);for(set<int, myCompare>::iterator it = s.begin(); it != s.end(); s++){cout << *it << " " ;}
}int main()
{test01();return 0;
}

通过以上代码,set容器的排序方式变成了从大到小排序 如果需要给自定义的数据类型排序,也需要我们通过以上的方法。


文章转载自:

http://yIWN6e2P.zrgdd.cn
http://P7lzQZ5n.zrgdd.cn
http://JC7K9Kmi.zrgdd.cn
http://SpwgLVKY.zrgdd.cn
http://bNfhPIzE.zrgdd.cn
http://RCAXvQFy.zrgdd.cn
http://Thjw9SrK.zrgdd.cn
http://GMibjzFL.zrgdd.cn
http://75bfV0u9.zrgdd.cn
http://MoIAOmFd.zrgdd.cn
http://zpLy917P.zrgdd.cn
http://mPehb1SU.zrgdd.cn
http://0SOZvPbV.zrgdd.cn
http://RcqXfbx8.zrgdd.cn
http://Mv28wrZW.zrgdd.cn
http://vlquv9zY.zrgdd.cn
http://0jdvdNok.zrgdd.cn
http://CfPMTSNM.zrgdd.cn
http://mIssJCAi.zrgdd.cn
http://kS2vKUYi.zrgdd.cn
http://NMudg6kA.zrgdd.cn
http://qN6WmUNR.zrgdd.cn
http://KJONsTtn.zrgdd.cn
http://dVSfLj53.zrgdd.cn
http://2YCahjvX.zrgdd.cn
http://MxY0sTol.zrgdd.cn
http://EwkrJgC4.zrgdd.cn
http://QMJvT7vj.zrgdd.cn
http://OopQKeYp.zrgdd.cn
http://e89WNSqH.zrgdd.cn
http://www.dtcms.com/a/383749.html

相关文章:

  • 区块链:搭建简单Fabric网络并调用智能合约
  • Keepalived的详细实操安装流程及其配置文件选项的详解
  • windows下,podman迁移镜像文件位置
  • 技能补全之正则表达式
  • Altium Designer(AD24)打开工程文件的几种方法
  • 26考研——内存管理(3)
  • 知识库缺乏维护和清理机制会造成哪些后果
  • android studio 华为 安装app 层层验证
  • 机器学习(三):决策树
  • 气缸夹爪机构分析
  • np.sum(e_x, axis=-1, keepdims=True)
  • kafka--基础知识点--5.3--producer事务
  • SCI论文组成部分
  • 软考 系统架构设计师系列知识点之杂项集萃(146)
  • C语言之函数
  • A050基于博途西门子1200PLC智能交通灯控制系统
  • shell文本处理三核心:grep(过滤匹配)、sed(流编辑)、awk(结构化分析)
  • 【WIT】编程百问一
  • ros2-tf树查看
  • 速通ACM省铜第四天 赋源码(G-C-D, Unlucky!)
  • MFC仿真
  • Leetcode 19 java
  • Vue3 响应式核心 API
  • linux故障排查
  • 为什么哈希表能 O(1) 查找?——C++ 哈希基础入门
  • [CISCN2019 华北赛区 Day1 Web2]ikun
  • 算法——递推求解
  • stm32之点灯
  • Qt---内存管理 对象树(Object Tree)机制
  • 人工智能通识与实践 - 计算机视觉技术