在这里插入图片描述

总结:







6 set和multiset的区别

区别:


分析一下set容器的insert函数,从而验证set插入数据的同时会返回插入结果,表示插入是否成功。

在这里插入图片描述



在这里插入图片描述



通过查看insert函数的定义发现,他会返回一个pair类型。pair类型又是个结构体,里面有两个数。

解析:

  1. pair代表对组类型。
    对组:成对出现的一组数据

  2. insert返回pair
    其中iterator(迭代器):代表插入的位置
    bool(布尔变量):代表插入是否成功。true代表成功,false代表失败




这是multiset容器的insert函数,他只返回一个迭代器,并不检测数据。
在这里插入图片描述




#include
using namespace std;
#include


void test01() {
	set s1;
	pair::iterator, bool> ret1 = s1.insert(100);
	// 注意使用对组里数据的方法
	if (ret1.second) {
		cout << "向set容器里第一次插入100成功!" << endl;

	}
	else {
		cout << "向set容器里第一次插入100失败!" << endl;
	}
	pair::iterator, bool> ret2 = s1.insert(100);
	if (ret2.second) {
		cout << "向set容器里第二次插入100成功!" << endl;

	}
	else {
		cout << "向set容器里第二次插入100失败!" << endl;
	}
	cout << endl << endl;

	// multiset
	multiset m1;
	m1.insert(99);
	m1.insert(100);
	m1.insert(88);
	m1.insert(66);
	cout << "multiset容器里的数据如下:" << endl;
	for (multiset::iterator it = m1.begin(); it != m1.end(); it++) {
		cout << *it << "   ";
	}cout << endl << endl;;
	cout << "再向multiset容器里插入两个100后,容器里的数据为:" << endl;
	m1.insert(100);
	m1.insert(100);
	for (multiset::iterator it = m1.begin(); it != m1.end(); it++) {
		cout << *it << "   ";
	}cout << endl;
	cout << endl;
	
}


int main() {
	test01();
	cin.get();
	return 0;



}

在这里插入图片描述

总结:

multiset容器使用方法与set容器基本一致,但multiset没有插入数据检测,因此可以重复插入数据。它的insert函数只返回一个迭代器,表示插入数据的位置。







7 pair对组创建

功能描述:

使用对组时不需要包含头文件

两种创建方式:



#include
using namespace std;
#include



void test01() {
	pair ret1("asdasd",25);
	cout << "第一种方式创建对组" << endl;
	cout << "姓名:" << ret1.first << "    " << "年龄:" << ret1.second << endl< ret2=make_pair("ll;l,l,;", 35);
	cout << "姓名:" << ret2.first << "    " << "年龄:" << ret2.second << endl;


}

int main() {
	test01();
	cin.get();
	return 0;


}

在这里插入图片描述







8 set容器排序

学习目标:

主要技术点:



8.1 内置类型指定排序规则

注意:set容器在插入数据时就会自动排序,所以我们要在插入数据前就得修改排序规则

利用仿函数(它包含在一个类里,类中有各个数据类型的仿函数)来指定排序规则,在set模板参数列表中再加一个参数

在这里插入图片描述
第二个参数有默认值,现在我们要给他赋值。


// 排序规则,利用仿函数,仿函数就是重载()
// 之不过仿函数要封装在类里
class Mycompare {
public:
	// 第一个()是重载的意思,第二个()里放参数
	// 注意最后要加一个const,这是C++最新规则规定的
	
	bool operator()(int num1, int num2) const{
		return num1 > num2;
	}


};
 // 然后把类名加到set参数列表里面去
sets2;



	s2.insert(10);
	s2.insert(20);
	s2.insert(40);
	s2.insert(30);
	s2.insert(5);
	for (set::iterator it = s2.begin(); it != s2.end(); it++) {
		cout << *it << "   ";

	}
	cout << endl;





综合:

#include
using namespace std;
#include

// 打印函数
void printSet(set s) {
	for (set::iterator it = s.begin(); it != s.end(); it++) {
		cout << *it << "    ";


	}
	cout << endl;
}

// 排序规则,利用仿函数,他是个类
class Mycompare {
public:
	// 第一个()是重载的意思
	bool operator()(int num1, int num2) const{
		return num1 > num2;
	}



};
// 针对内置的数据类型



void test01() {
	sets1;
	s1.insert(10);
	s1.insert(20);
	s1.insert(40);
	s1.insert(30);
	s1.insert(5);
	cout << "没有修改排序规则的set容器s1:" << endl;
	printSet(s1); cout << endl;

	// 指定排序规则为从大到小
	// 第二个参数直接输入类名
	sets2;



	s2.insert(10);
	s2.insert(20);
	s2.insert(40);
	s2.insert(30);
	s2.insert(5);
	cout << "将s2的排序规则修改为降序:" << endl;
	for (set::iterator it = s2.begin(); it != s2.end(); it++) {
		cout << *it << "   ";

	}
	cout << endl;
}

int main() {
	test01();
	cin.get();
	return 0;



}

在这里插入图片描述

总结:利用仿函数可以指定set容器的排序规则





8.2 自定义数据类型指定排序规则

#include
using namespace std;
#include
#include
// 打印函数


// 针对自定义的数据类型
class Person {
public:
	string m_Name;
	int m_Age;
	Person(string name,int age):m_Name(name),m_Age(age){}

};
// 排序规则,利用仿函数,他是个类
class Mycompare {
public:
	// 第一个()是重载的意思
	// 按照年龄进行降序
	bool operator()(Person p1, Person p2) const{
		return p1.m_Age > p2.m_Age;
	}



};

void test01() {
	Person p1("asddsa", 25);
	Person p2("waeeee", 36);
	Person p3("男枪", 46);
	Person p4("NAVI", 76);
	set s1;
	s1.insert(p1);
	s1.insert(p2);
	s1.insert(p3);
	s1.insert(p4);

	// 看看他默认是如何排序的
	// 这样子肯定不能输出,他怎么知道按照哪个规则排序呢???
	// 所以自定义类型必须指定排序规则
	for (set::iterator it = s1.begin(); it != s1.end(); it++) {
		cout << "姓名:" << it->m_Name << "   " << "年龄:" << it->m_Age << endl;



	}
	cout << endl;




}

int main() {
	test01();
	cin.get();
	return 0;



}

在这里插入图片描述

总结:对于自定义数据类型,set必须指定排序规则才可以插入数据

  • 相关阅读:
    数据类型与变量
    DFS membe端配置
    python运算符重载之构造函数和迭代器
    COIN++: Neural Compression Across Modalities 论文阅读笔记
    内网渗透学习-环境搭建
    Python --- GUI编程(1)
    不知道WORD中英文翻译软件有哪些?这篇文章告诉你
    redis---非关系型数据库
    transformers 之 head介绍
    Proxmox VE 网络配置 NAT共享IP 端口映射iptables、brook
  • 原文地址:https://blog.csdn.net/weixin_53213086/article/details/126963674