9.set容器的使用

文章目录

    • set容器
      • 1.构造和赋值
        • 代码工程
        • 运行结果
      • 2.大小和交换
        • 代码工程
        • 运行结果
      • 4.插入和删除
        • 代码工程
        • 运行结果
      • 5.查找和统计
        • 工程代码
        • 运行结果
      • 6.multset
        • 代码工程
        • 运行结果
      • 7.指定排序规则
        • 代码工程
        • 运行结果
      • 8.自定义数据类型排序
        • 代码工程
        • 运行结果

set容器

	所有元素都会在插入时,自动被排序。set/multset属于关联式容器,底层结构式用二叉树实现的。
	set容器不允许有重复的元素;
	multset容器允许有重复的元素。

1.构造和赋值

/*1.插入 - insert*/
/*2.拷贝构造*/
/*3.赋值 - operator= */
代码工程
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<set>

using namespace std;

/*1.插入 - insert*/
/*2.拷贝构造*/
/*3.赋值 - operator= */
void printSet(const set<int>&s)
{
	for (set<int>::const_iterator it = s.begin(); it != s.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}

void test01()
{
	set<int>s;
	/*1.插入 - insert  插入数据只有insert方式*/
	s.insert(20);
	s.insert(30);
	s.insert(10);
	s.insert(40);

	/*无序插入,输出打印还是有序排列的*/
	printSet(s);

	/*2.拷贝构造*/
	set<int>s1(s);

	printSet(s1);

	/*3.赋值  operator= */
	set<int>s2;
	s2 = s1;

	printSet(s2);

	return;
}

int main()
{
	test01();


	return 0;
}
运行结果

在这里插入图片描述

2.大小和交换

/*1.判断大小 - size*/
/*2.判断是否为空 - empty*/
/*3.交换容器 - swap */
代码工程
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<set>

using namespace std;

/*1.判断大小 - size*/
/*2.判断是否为空 - empty*/
/*3.交换容器 - swap */
void printSet(const set<int>& s)
{
	for (set<int>::const_iterator it = s.begin(); it != s.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}

void test01()
{
	set<int>s;
	s.insert(20);
	s.insert(30);
	s.insert(10);
	s.insert(40);

	printSet(s);

	if (0 != s.empty())
	{
		cout << "容器为空" << endl;
		return;
	}

	cout << "容器的大小:" << s.size() << endl;

	set<int>s1;
	s1.insert(200);
	s1.insert(300);
	s1.insert(100);
	s1.insert(400);

	cout << endl;
	cout << "交换两个容器的元素" << endl;

	cout << "交换前s容器元素:" << "\t";
	printSet(s);

	cout << "交换前s1容器元素:" << "\t";
	printSet(s1);

	s.swap(s1);

	cout << "交换后s容器元素:" << "\t";
	printSet(s);

	cout << "交换后s1容器元素:" << "\t";
	printSet(s1);
	return;
}

int main()
{
	test01();


	return 0;
}
运行结果

在这里插入图片描述

4.插入和删除

/*1.插入数据 - insert*/
/*2.删除数据 - erase*/
/*3.清空数据 - clear*/
代码工程
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<set>

using namespace std;

/*1.插入数据 - insert*/
/*2.删除数据 - erase*/
/*3.清空数据 - clear*/

void printSet(const set<int>& s)
{
	for (set<int>::const_iterator it = s.begin(); it != s.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}

void test01()
{
	set<int>s;

	/*1.插入数据 - insert*/
	s.insert(20);
	s.insert(30);
	s.insert(10);
	s.insert(40);

	printSet(s);

	/*2.删除数据 - erase*/
	s.erase(s.begin());

	printSet(s);

	/*删除 - 重载版本*/
	s.erase(40);

	printSet(s);

	/*3.清空 - clear*/
	s.clear();
	//erase(s.begin(), s.end());

	printSet(s);

	if (0 == s.empty())
	{
		cout << "容器不为空" << endl;
	}
	else
	{
		cout << "容器为空" << endl;
	}

	return;
}

int main()
{
	test01();


	return 0;
}
运行结果

在这里插入图片描述

5.查找和统计

/*1.查找数据 - find*/
/*2.统计个数 - count*/
工程代码
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<set>

using namespace std;

/*1.查找数据 - find*/
/*2.统计个数 - count*/

void printSet(const set<int>& s)
{
	for (set<int>::const_iterator it = s.begin(); it != s.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}

void test01()
{
	set<int>s;

	s.insert(20);
	s.insert(30);
	s.insert(10);
	s.insert(40);

	printSet(s);

	set<int>::iterator pos = s.find(30);

	if (s.end() == pos)
	{
		cout << "没找到元素" << endl;
	}
	else
	{
		cout << *pos << endl;
		/*set容器统计个数要么是0,要么是1*/
		cout << "统计元素是20的个数:" << s.count(20) << endl;
	}

	return;
}

int main()
{
	test01();

	return 0;
}
运行结果

在这里插入图片描述

6.multset

	multset可以插入重复的元素
代码工程
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<set>

using namespace std;

void printMultset(const multiset<int>&ms)
{
	for (multiset<int>::const_iterator it = ms.begin(); it != ms.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}


void test01()
{
	multiset<int>ms;
	/*可以插入重复的元素*/
	ms.insert(20);
	ms.insert(30);
	ms.insert(30);
	ms.insert(10);

	printMultset(ms);

	return;
}

int main()
{
	test01();

	return 0;
}
运行结果

在这里插入图片描述

7.指定排序规则

代码工程
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<set>

using namespace std;

class MyCmp
{
public:
	/*仿函数后边加入,const*/
	bool operator()(int v1, int v2) const
	{
		return v1 > v2;
	}
};

void printSet(set<int, MyCmp>& s)
{
	for (set<int, MyCmp>::iterator it = s.begin(); it != s.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}

void test01()
{
	set<int, MyCmp>s;
	s.insert(20);
	s.insert(30);
	s.insert(10);
	s.insert(40);

	printSet(s);

	return;
}

int main()
{
	test01();

	return 0;
}
运行结果

在这里插入图片描述

8.自定义数据类型排序

代码工程
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
#include<set>

using namespace std;

class Person
{
public:
	Person(string name, int age)
	{
		my_name = name;
		my_age = age;
	}

	string my_name;
	int my_age;
};

class MyCmp
{
public:
	bool operator()(Person p1, Person p2) const
	{
		if (p1.my_age > p2.my_age)
		{
			return true;
		}
		else
		{
			return false;
		}
	}
};

void printSet(set<Person, MyCmp>&s)
{
	for (set<Person, MyCmp>::iterator it = s.begin(); it != s.end(); it++)
	{
		cout << "姓名:" << it->my_name << "\t" << "年龄" << it->my_age << endl;
	}
}

void test01()
{
	Person p1("曹操", 28);
	Person p2("刘备", 30);
	Person p3("赵云", 35);

	set<Person, MyCmp>s;

	s.insert(p1);
	s.insert(p2);
	s.insert(p3);

	printSet(s);

	return;
}


int main()
{
	test01();

	return 0;
}
运行结果

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ABAP SHIFT-字符串移位 和 CONDENSE去除空格

文章目录 SHIFT-字符串移位 和 CONDENSE去除空格SHIFT BY n PLACES RIGHT/LEFT运行结果 SHIFT ... UP TO ...运行结果 其他的-变量后面加括号和数字SHIFT c LEFT/RIGHT DELETING运行结果 SHIFT 去除0示例程序1运行结果示例程序2运行结果 CONDENSE示例程序运行结果 SHIFT-字符串…

电荷泵如何实现升压原来

电荷泵如何实现升压原来 某芯片自举栅极驱动内部原理图迪克森电荷泵 某芯片自举栅极驱动内部原理图 迪克森电荷泵 迪克森电荷泵&#xff08;Dickson Charge Pump&#xff09;是一种电压倍增器电路&#xff0c;可以将低电压升高到较高电压&#xff0c;相对于其他电压升压电路&a…

Vue3:组件间通信-各种通信方式的用法总结

Vue3组件通信和Vue2的区别&#xff1a; 移出事件总线&#xff0c;使用mitt代替。vuex换成了pinia。把.sync优化到了v-model里面了。把$listeners所有的东西&#xff0c;合并到$attrs中了。$children被砍掉了。

Java NIO是New IO还是Non-blocking IO

文章目录 前言NIO到底叫啥通过对比理解NIO传统IO网络编程NIO引入的新概念NIO网络编程两者区别NIO的事件驱动 总结 前言 很多小伙伴对Java NIO的一些概念和编程不是很理解&#xff0c;希望通过本文对Java NIO与传统IO的对比&#xff0c;可以帮助大家更好地理解和掌握Java NIO。…

10-用PySpark建立第一个Spark RDD

目录 RDD概念RDD特点建立RDD的方式不同工具建立RDD的方式使用PySpark Shell(交互环境)建立RDD使用VSCode编程建立RDD使用Jupyter Notebook建立RDD 总结 PySpark实战笔记系列第一篇 RDD概念 Apache Spark的核心组件的基础是RDD。所谓的RDD&#xff0c;即弹性分布式数据集&#…

力扣刷题 二叉树的迭代遍历

题干 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,2,3]示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[]示例 3&#xff1a; 输入&#xff1a;root [1] 输…

以太网布局指南

2层板 顶层走信号线以及地平面底层走信号线以及地平面信号走线应至少沿一条边被接地或接地走线包围如果使用地走线&#xff0c;应接本层接地平面&#xff0c;与上层接地平面解耦。 4层板 当信号走线被重新引用到功率平面时&#xff0c;在地平面和功率平面之间需要去耦电容器(0…

CSS - 你实现过0.5px的线吗

难度级别:中级及以上 提问概率:75% 我们知道在网页显示或是网页打印中,像素已经是最小单位了,但在很多时候,即便是最小的1像素,精度却不足以呈现所需的线条精度和细节。因此,为了在网页显示和网页打印中呈现更加细致的线条,为了在视觉…

回归预测 | Matlab基于CPO-GPR基于冠豪猪算法优化高斯过程回归的多输入单输出回归预测

回归预测 | Matlab基于CPO-GPR基于冠豪猪算法优化高斯过程回归的多输入单输出回归预测 目录 回归预测 | Matlab基于CPO-GPR基于冠豪猪算法优化高斯过程回归的多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab基于CPO-GPR基于冠豪猪算法优化高斯…

【C语言】猜数字小游戏(并讲解随机数相关知识)

前言 一、游戏菜单 二、游戏逻辑 1.用户选择 2.开始游戏 2.1 生成1~100的随机数 总结 前言 本文讲解使用C语言写一个猜数字小游戏(1~100)&#xff0c;涉及到的语法为&#xff1a;循环、分支、随机数、函数 一、游戏菜单 一个游戏的最开始&#xff0c;往往是一个菜单&…

从零开始实现一个RPC框架(一)

前言 在上一篇文章中我们先列举了大致的需求&#xff0c;定义了消息协议。这次我们着手搭建基本的RPC框架&#xff0c;首先实现基础的方法调用功能。 功能设计 RPC调用的第一步&#xff0c;就是在服务端定义要对外暴露的方法&#xff0c;在grpc或者是thrift中&#xff0c;这一…

如何删除 iPhone 上的 iCloud 激活锁

Apple 在 iPhone 上通过不同的安全屏障来保护您的数据。 iCloud 激活锁可阻止外部人员访问您的手机。您可以通过打开“查找我的 iPhone”功能来激活此锁。 使用安全协议似乎是无害的&#xff0c;直到你到达门的另一边。如果您购买了带有激活锁的二手 iPhone 或忘记了 iCloud 凭…

面试经典-Spring篇

1、解释Spring框架中bean的生命周期 2、单例Bean的优势

CEF的了解

(14 封私信 / 80 条消息) CEF和Electron的区别是什么&#xff1f; - 知乎 (zhihu.com) Electron面向的开发者&#xff1a;会用JavaScript,HTML,CSS&#xff0c;不会C CEF面向的开发者&#xff1a;会用JavaScript,HTML,CSS&#xff0c;会C (14 封私信 / 80 条消息) liulun - …

【文献分享】ALKEMIE:加速材料发现和设计的智能计算平台

题目&#xff1a;ALKEMIE: An intelligent computational platform for accelerating materials discovery and design 链接&#xff1a;DOI: 10.1016/j.commatsci.2020.110064 ALKEMIE&#xff1a;加速材料发现和设计的智能计算平台 摘要 通过传统的试错方式开发具有目标特性…

如何使用PL/SQL Developer工具导出clob字段的表?

1 准备测试数据 导出测试对象&#xff1a;表test_0102&#xff0c;others字段为clob类型 --创建中间表test_0101 create table test_0101( id number, name varchar2(20), others clob);--插入100条测试数据 beginfor i in 1..100 loopinsert into test_0101 values(i,i||_a,l…

利用免费的开源AI引擎:优化企业合规管理与合同审核

合同作为商业活动中的重要法律文件&#xff0c;其准确性、完整性和合规性对于保障企业利益至关重要。然而&#xff0c;传统的人工合同审核和管理过程耗时耗力&#xff0c;且容易出错。随着人工智能技术的发展&#xff0c;我们现在可以通过智能化的手段来优化合同审核和管理流程…

【MATLAB源码-第30期】基于matlab的内边界边缘检测算法。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 在计算机视觉领域&#xff0c;图像分割&#xff08;segmentation&#xff09;指的是将数字图像细分为多个图像子区域&#xff08;像素的集合&#xff09;&#xff08;也被称作超像素&#xff09;的过程。图像分割的目的是简化…

聚酰亚胺PI材料难于粘接,用什么胶水粘接?那么让我们先一步步的从认识它开始(十八): 聚酰亚胺PI泡沫有哪些应用领域

聚酰亚胺PI泡沫有哪些应用领域 聚酰亚胺&#xff08;PI&#xff09;泡沫由于其一系列优异的特性&#xff0c;在许多高性能应用领域中都有广泛的应用&#xff0c;包括但不限于&#xff1a; 航空航天领域&#xff1a;聚酰亚胺PI泡沫由于其出色的耐高温、隔热和阻燃性能&#xff0…

vue2中的局部组件和全局组件

注&#xff1a;vue2中使用组件远没有vue3中简单&#xff0c;具体可以看阿耿老师的lingshi小程序 如图所示&#xff1a;