set(集合),multiset容器及pair队组的创建

1.set的基本概念 :所有元素再插入时自动按升序排序,set/multiset属于关联式容器,底层结构是用二叉树实现的

set与multiset区别:

set中不允许容器中有重复的元素

multiset允许容器中有重复的元素

2.set的构造函数

3.set的大小和交换

4.set的插入和删除操作

5.set的查找和统计

cpp 复制代码
void test01()
{
	set<int> s;
	s.insert(10);
	s.insert(40);
	s.insert(20);
	s.insert(50);
	s.insert(20);
	s.insert(20);
	set<int>::iterator it=s.find(200);//find的返回值是迭代器,没找到返回s.end()
	if (it != s.end())
	{
		cout << "找到元素" << *it << endl;
	}
	else
	{
		cout << "没找到元素" << endl;
	}
	int num = s.count(20);//对于set而言没有重复元素,只返回0和1
	cout << num << endl;
}

6.set不能插入重复元素multiset能插入重复元素的原因

set插入数据的同时会返回插入结果,表示插入成功

multiset不会检测数据,因此可以插入重复数据

set.insert的底层代码:返回值是pair对组类型

multiset.insert的底层代码:返回值是迭代器

7.pair队组的创建

第一个元素first,第二个元素second

cpp 复制代码
void test01()
{
	pair<string, int> p1("张三", 16);
	cout << "姓名:" << p1.first << " 年龄:" << p1.second << endl;
	pair<string, int> p2 = make_pair("李四", 15);
	cout << "姓名:" << p2.first << " 年龄:" << p2.second << endl;
}

8.set容器的排序(利用仿函数可以改变排序规则)

set存放内置数据类型排序

cpp 复制代码
class mycompare
{
public://仿函数
	bool  operator()(int v1, int v2)const//这里要加const
	{
		return v1 > v2;//降序
	}
};
void test01()
{
	set<int> s1;
	s1.insert(20);
	s1.insert(50);
	s1.insert(30);
	s1.insert(10);
	s1.insert(40);
	for (set<int>::iterator it = s1.begin(); it != s1.end(); it++)//默认升序打印
	{
		cout << *it << " ";
	}
	cout << endl;
	set<int,mycompare> s2;//指定排序规则,两个参数都是数据类型//利用类里的仿函数可以指定排序规则
	s2.insert(20);
	s2.insert(50);
	s2.insert(30);
	s2.insert(10);
	s2.insert(40);
	for (set<int,mycompare>::iterator it = s2.begin(); it != s2.end(); it++)//降序打印
	{
		cout << *it << " ";
	}
}

set存放自定义数据类型排序

自定义类型都会指定排序规则

cpp 复制代码
class Person
{
public:
	Person(string name,int age)
	{
		this->m_name = name;
		this->m_age = age;
	}
	string m_name;
	int m_age;
};
class mycompare
{
public:
	bool  operator()(const Person &p1,const Person &p2)const//这里要加const
	{
		return p1.m_age>p2.m_age;//降序
	}
};
void test01()
{
	set<Person,mycompare> s1;
	Person p1("张三", 16);//如果年龄相同还要制定另一套规则
	Person p2("李四", 18);
	Person p3("王五", 15);
	Person p4("赵六", 14);
	s1.insert(p1);
	s1.insert(p2);
	s1.insert(p3);
	s1.insert(p4);
	for (set<Person,mycompare>::iterator it = s1.begin(); it != s1.end(); it++)//对于自定义数据类型,指定排序规则打印
	{
		cout << "姓名:" << it->m_name << " 年龄:" << it->m_age << endl;
	}
}
相关推荐
wifi___4 小时前
全局异常处理的原理
java·开发语言
我变成萤火虫5 小时前
河南萌新联赛2026第(四)场:南阳理工学院
数据结构·c++·算法·贪心算法·stl·动态规划
平常心的技术小牛7 小时前
Qt-快速上手-QMenuBar
开发语言·qt
青 春 记 忆7 小时前
零基础入门Python11|Git实战:为任务管理器建立版本历史
开发语言·git·vscode·python·python3.11
余额瞒着我当琳9 小时前
C++--深拷贝三件套 + swap + 写时拷贝 + vector 扩容 + reserve
java·开发语言·c++
坐吃山猪10 小时前
WebClient内存配置解析
开发语言·springboot·webflux
jdksjw10 小时前
同步与异步、阻塞与非阻塞、多线程、协程超详细讲解(Python并发编程从入门到精通)
开发语言·python
Zach_菠萝侠10 小时前
【DeepSeek Harness 研究】进化方向4:安全加固 思考、设计与实现
开发语言·安全·deepseek
ShineWinsu10 小时前
对于C++:布隆过滤器(bloomfilter)的详细解析
c++·面试·位图·位运算·布隆过滤器·海量数据·比特位
SL-staff11 小时前
技术实践:HR如何用JVS-Logic可视化编排实现考勤数据同步(含节点配置与异常处理)
开发语言·python·低代码·钉钉·可视化编排·jvs-logic·hr技术