c++STL set和multiset容器

c++STL set和multiset容器,第1张

set容器: 所有元素会在插入时自动排序

set和multiset属于关联式容器 ,由二叉树实现

set和multiset的区别:

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

2.multiset中允许有重复元素

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

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

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

set和multiset代码相同 下面只举例一种

1.set构造函数和赋值
setst默认构造函数
set(const set&st)拷贝构造函数
set& operator=(const set&st)重载=号
2.set大小和交换
size()返回元素个数
empty()判空
swap()交换
3.set插入和删除
insert(elem)插入 elem
clear()清空
erase(pos)删除迭代器所指的元素,返回下一个元素迭代器
erase(beg,end)删除区间内的所有元素,返回下一个元素迭代器
erase(elem)删除容器中值为elem的元素
4.查找和统计
find(pop)查找pop,存在返回该元素迭代器,否则返回set.end()
count(pop)统计pop的个数
5.set容器的排序

set容器默认从小到大排序,可以用仿函数改变排序

//仿函数
class Person
{
public:
	bool operator()(int a, int b)const
	{
		return a > b;
	}
};
void text()
{
    //改变排序方式
	setst;
	st.insert(10);
	st.insert(20);
	st.insert(40);
	st.insert(50);
	st.insert(30);
	for (set::iterator it = st.begin(); it != st.end(); it++)
	{
		cout << *it << "  ";
	}
}

6.自定义数据类型排序

给定一个Person类型

//创建一个person类
class Person
{
public:
	Person(string name, int age)
	{
		Name = name;
		Age = age;
	}
	string Name;
	int Age;
};
//仿函数
class opop
{
public:
	bool operator()(const Person&a, const Person &b)
	{
		//按照age排序
		return a.Age > b.Age;
	}

};
void text()
{
	//给定排序方式
	sets;
	Person p1("A", 5);
	Person p2("B", 25);
	Person p3("D", 15);
	Person p4("E", 35);
	Person p5("C", 55);
	s.insert(p1);
	s.insert(p2);
	s.insert(p3);
	s.insert(p4);
	s.insert(p5);
	for (set::iterator it = s.begin(); it != s.end(); it++)
	{
		cout << (*it).Name << "  " << (*it).Age << endl;
	}

}
int main()
{
	text();
	return 0;
}
6.pair队组创建

成对出现的数据 ,利用队组返回两个数据

pairp(elem1,elem2)

pairp=make_pair(elem1,elem2)
	pairp("name", 5);
	cout << p.first << "  " << p.second<p1=make_pair("name1", 10);
	cout << p1.first << "  " << p1.second << endl;

可以用pair来接收set的插入结果

//s.insert(10)会有一个返回值,表示是否插入成功
pair(set::iterator, bool) op = s.insert(10);

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/580061.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-11
下一篇 2022-04-11

发表评论

登录后才能评论

评论列表(0条)

保存