set容器的基本概念及常用函数

set(集合)基本概念

特点

所有元素都会在插入时自动排序

本质:

set/multiset属于关联式容器,底层的实现是二叉树

set与multiset的区别

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

2、multiset可以有重复的元素

set的构造与赋值操作

函数原型:

set容器的基本概念及常用函数_第1张图片

eg:

注:set插入元素只能用insert,无push_back;

(我的理解是:set是一个集合,根据数学概念可知,集合无尾部的概念,因此没有尾插法。并且不能用下标访问集合中的元素。)

#include
using namespace std;
#include
#include
void printSet(const set&s)
{
	for (set::iterator it=s.begin();it!=s.end();it++)
	{
		cout << *it << ' ';
	}
	cout << endl;
}

int main()
{
	sets;
	s.insert(20);
	s.insert(10);
	s.insert(50);
	s.insert(30);
	s.insert(40);
	s.insert(30);
	s.insert(30);
	printSet(s);//10 20 30 40 50.插入时无序,输出时有序。即set容器在存储元素时会自动排序。类比二叉排序树。并且容器中无重复元素
	sets1(s);//拷贝构造
	printSet(s1);
	sets2 = s;//赋值操作
	printSet(s2);
	return 0;
}

set的大小和交换操作

作用:对set的大小进行操作以及交换两个set容器

对象函数总结:统计大小---size     判断容器是否为空---empty        交换容器----swap

set容器的基本概念及常用函数_第2张图片

与其他容器的大小和交换操作类似,熟练掌握即可

set插入和删除

set容器的基本概念及常用函数_第3张图片

set查找和统计

功能描述:对set容器进行查找数据以及统计数据

set容器的基本概念及常用函数_第4张图片

注:对于set,由于set容器中不允许有相同元素,因此count的返回值只会为0或1

对于multiset会大于1

set与与multiset的区别

1、set不能插入重复数据,而multiset可以

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

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

eg:

#include
using namespace std;
#include
#include
void printSet(const set&s)
{
	for (set::iterator it=s.begin();it!=s.end();it++)
	{
		cout << *it << ' ';
	}
	cout << endl;
}
void printSet(const multiset& s)
{
	for (multiset::iterator it = s.begin(); it != s.end(); it++)
	{
		cout << *it << ' ';
	}
	cout << endl;
}

int main()
{
	sets;
	pair::iterator,bool>ret=s.insert(20);//pair里面存了两种类型,第一种是set的迭代器,第二种是bool
	if (ret.second)
	{
		cout << "第一次插入成功" << endl;
	}
	else {
		cout << "第一次插入失败" << endl;
	}
	ret=s.insert(20);
	if (ret.second)
	{
		cout << "第二次插入成功" << endl;//结果显示:第一次插入成功,第二次插入失败
	}
	else {
		cout << "第二次插入失败" << endl;
	}
	printSet(s);
	multisetms;
	ms.insert(10);
	ms.insert(10);
	printSet(ms);
	return 0;
}

pair对组(键值对)的创建

set容器的基本概念及常用函数_第5张图片

eg:

#include
using namespace std;
#include
#include
void printSet(const set&s)
{
	for (set::iterator it=s.begin();it!=s.end();it++)
	{
		cout << *it << ' ';
	}
	cout << endl;
}
void printSet(const multiset& s)
{
	for (multiset::iterator it = s.begin(); it != s.end(); it++)
	{
		cout << *it << ' ';
	}
	cout << endl;
}

int main()
{
	pair p("张三", 18);
	cout << "姓名:" << p.first << "\t年龄:" << p.second << endl;//用first和second访问键值对的第一个类型和第二个类型
	pair p1=make_pair("李四", 20);
	cout << "姓名:" << p.first << "\t年龄:" << p.second << endl;
	return 0;
}

你可能感兴趣的:(c++,算法)