10016set01基本概念

205 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第5天,点击查看活动详情

1 set/ multiset 容器

1.1 set基本概念

简介:

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

本质:

  • set/multiset属于关联式容器,底层结构是用二叉树实现。

1.2 set和multiset区别

  • set不允许容器中有重复的元素
  • multiset允许容器中有重复的元素

1.3 set构造和赋值

功能描述:创建set容器以及赋值

构造:

  • set<T> st; //默认构造函数:
  • set(const set &st); //拷贝构造函数

赋值:

  • set& operator=(const set &st); //重载等号操作符

1.4 代码示例:

#include <set>

void printSet(set<int> & s)
{
	for (set<int>::iterator it = s.begin(); it != s.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}

//构造和赋值
void test01()
{
	set<int> s1;

	s1.insert(10);
	s1.insert(30);
	s1.insert(20);
	s1.insert(40);
	printSet(s1);

	//拷贝构造
	set<int>s2(s1);
	printSet(s2);

	//赋值
	set<int>s3;
	s3 = s2;
	printSet(s3);
}

int main() {

	test01();

	system("pause");

	return 0;
}

1.5 总结:

  • set容器插入数据时用insert
  • set容器插入数据的数据会自动排序
  • 1.构造:
set st;
set(const set &st);
  • 2.赋值:
set& operator=(const set &st);
  • 3.大小和交换
size();
empty();
swap(st);

4.插入和删除 `insert(elem); clear(); erase(pos); erase(beg,end); erase(elem);

` 5.查找和统计:

find(key); //查找key是否存在,存在返回该键的迭代器 若不存在,返回set.end()
count(key); //对于set而言,统计结果要么是0 要么是1 (set中无重复元素)

6.set和multiset区别: set插入数据时会返回插入结果,表示是否插入成功 multiset不会检测数据,因此可以插入重复数据

7.set是STL中一种标准关联容器。它底层使用平衡的搜索树——红黑树实现,插入删除操作时仅仅需要指针操作节点即可完成,不涉及到内存移动和拷贝,所以效率比较高。set,顾名思义是“集合”的意思,在set中元素都是唯一的,而且默认情况下会对元素自动进行升序排列,支持集合的交(set_intersection),差(set_difference) 并(set_union),对称差(set_symmetric_difference) 等一些集合上的操作,如果需要集合中的元素允许重复那么可以使用multiset。