c++STL set和multiset容器

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);

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