栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

STL——set/multiset容器

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

STL——set/multiset容器

set/multiset:所有元素在插入时会自动排序

属于关联式容器,底层结构用二叉树实现

区别:

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

2.multiset允许容器中有重复元素

set容器构造和赋值

	#include 
	#include
	using namespace std;


	void printlist(const set& l)
	{
		for (set::const_iterator it = l.begin(); it != l.end(); it++)
		{
			cout << *it << endl;
		}
	}

	//set容器的创建和赋值
	void test1()
	{
		sets1;
		//set容器插入数据只有insert方式
		//set容器不允许有重复元素
		s1.insert(10);
		s1.insert(30);
		s1.insert(40);
		s1.insert(20);
		//拷贝构造
		sets2(s1);
		//赋值
		sets3;
		s3 = s2;
	}

set容器的大小和交换

	#include 
	#include
	using namespace std;


	void printlist(const set& l)
	{
		for (set::const_iterator it = l.begin(); it != l.end(); it++)
		{
			cout << *it << endl;
		}
	}

	//set容器的大小和交换操作
	void test1()
	{
		sets1;
		s1.insert(10);
		s1.insert(30);
		s1.insert(40);
		s1.insert(20);

		//判断是否为空
		if (s1.empty())
		{
			cout << "为空" << endl;
		}
		else
		{
			cout << "不为空" << endl;
			cout << s1.size() << endl;//set容器无法重新指定容器大小,不能使用resize
		}

		//交换
		sets2;
		s2.insert(100);
		s2.insert(300);
		s2.insert(400);
		s2.insert(200);
		s1.swap(s2);
	}

set容器的插入和删除

	#include 
	#include
	using namespace std;


	void printlist(const set& l)
	{
		for (set::const_iterator it = l.begin(); it != l.end(); it++)
		{
			cout << *it << endl;
		}
	}

	//set容器的插入和删除
	void test1()
	{
		sets1;
		//插入
		s1.insert(10);
		s1.insert(30);
		s1.insert(40);
		s1.insert(20);

		//删除
		s1.erase(s1.begin());//删除排序后对应位置的数字
		s1.erase(30);//删除指定数字
		s1.clear();
	}

set容器的查找和统计

	#include 
	#include
	using namespace std;


	void printlist(const set& l)
	{
		for (set::const_iterator it = l.begin(); it != l.end(); it++)
		{
			cout << *it << endl;
		}
	}

	//set容器的查找和统计
	void test1()
	{
		sets1;
		//插入
		s1.insert(10);
		s1.insert(30);
		s1.insert(40);
		s1.insert(20);

		//查找元素
		//find函数会返回元素位置的迭代器,需要用一个迭代器接收;如果没找到,会返回end()
		set::iterator it = s1.find(40);
		//end是最后一个元素的下一个位置,因此即使数据在最后一个位置也能找到
		if (it != s1.end())
		{
			cout << "找到" << endl;
		}
		else
		{
			cout << "没找到" << endl;
		}
		
		//统计指定数值的个数
		int num = s1.count(30);
		cout << num << endl;
	}

set和multiset的区别:

1.set不可以插入重复数据,multiset可以

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

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

	#include 
	#include
	using namespace std;


	void printset(const set& l)
	{
		for (set::const_iterator it = l.begin(); it != l.end(); it++)
		{
			cout << *it << endl;
		}
	}

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

	//set容器的查找和统计
	void test1()
	{
		sets1;
		//插入
		//s1.insert(10);
		//set不允许插入重复值
		//set的插入会返回插入结果,可以返回为迭代器
		pair::iterator, bool>ret = s1.insert(10);
		if (ret.second)
		{
			cout << "第一次插入成功" << endl;
		}
		else
		{
			cout << "第一次插入失败" << endl;
		}
		//multiset允许插入重复值
		multisetms;
		ms.insert(10);
		ms.insert(10);
		printmutiset(ms);
	}

set容器排序

set容器默认排序为从小到大,可以通过仿函数进行从大到小排序

	#include 
	#include
	using namespace std;


	void printset(const set& l)
	{
		for (set::const_iterator it = l.begin(); it != l.end(); it++)
		{
			cout << *it << endl;
		}
	}

	class mycompare
	{
	public:
		bool operator()(int v1, int v2)
		{
			return v1 > v2;
		}
	};
	//set容器的排序
	void test1()
	{
		//指定排序规则为从大到小
		//在创建容器之前设定从大到小
		//创建compare类的仿函数
		sets2;
		sets1;
		s1.insert(50);
		s1.insert(10);
		s1.insert(20);
		s1.insert(40);
		s1.insert(30);
	}

set容器自定义数据类型指定排序规则

	#include 
	#include
	using namespace std;


	void printset(const set& l)
	{
		for (set::const_iterator it = l.begin(); it != l.end(); it++)
		{
			cout << (*it).m_name <<(*it).m_age<< endl;
		}
	}


	class person
	{
	public:
		person(string name, int age)
		{
			this->m_name = name;
			this->m_age = age;
		}
		string m_name;
		int m_age;
	};
	//仿函数把person作为参数,所以要在person类创建之后再创建
	class mycompare
	{
	public:
		bool operator()(const person& p1, const person& p2)
		{
			return p1.m_age > p2.m_age;
		}
	};
	//set容器自定义数据类型指定排序规则
	void test1()
	{
		//自定义数据类型应指定排序规则
		sets;

		//创建person对象
		person p1("A", 10);
		person p2("B", 20);
		person p3("C", 30);
		s.insert(p1);
		s.insert(p2);
		s.insert(p3);
	}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/338893.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号