map和set

map和set

  • 关联式容器
  • set
    • set模板参数列表
    • set的构造
    • set的迭代器
    • set容量操作
    • set增删查改
      • insert
      • erase
      • find
  • multiset
    • 注意事项
  • map
    • map的模板参数
    • map的构造
    • map的迭代器
    • map的容量操作
    • map的增删查改
    • 注意事项
  • multimap
    • 注意事项

关联式容器

STL中容器一般可以分为两类,一类是以vector、list、deque等为代表的序列式容器,他的特点是其底层为线性序列的数据结构,里面存储的是元素本身。还有一种是关联式容器,他也是用来存储数据的,但是和序列式容器的区别在于它里面存放的是结构的键值对,在进行数据检索的时候比序列式容器效率更高。STL中有两种不同结构的关联式容器:树型结构和哈希结构。这里介绍的是树型结构的关联式容器:map和set。这种容器的特点是使用平衡搜索树作为底层结构。下面来看一下他的具体实例以及应用。

set

set模板参数列表

map和set_第1张图片
从set模板定义中可以看到,set里面有3个模板参数,T代表存放元素的数据类型,set是一种key结构的搜索二叉树。Compare和STL中的优先级队列类似,是一种仿函数用来控制该二叉树的排序依据。Alloc则是set种元素空间的管理方式,使用STL提供的空间配置器

set的构造

map和set_第2张图片
map和set_第3张图片
set的构造和其他STL容器类似,都支持默认构造、拷贝构造以及赋值重载。在默认构造函数中,它可以进行构造空的set也可以用一段迭代器区间来构造set。

set的迭代器

map和set_第4张图片
set的迭代器和其他容器的迭代器几乎没有区别,begin用来返回起始位置元素的地址,end返回最后一个元素后面的地址,同时也支持反向迭代器等。

set容量操作

map和set_第5张图片
empty是用来判断set是否为空
size则是计算set中元素的个数

set增删查改

map和set_第6张图片
map和set_第7张图片
这里是对set进行增删查改操作,具体下面用代码演示具体使用:

void TestSet()
{
   
	set<int> st;
	int arr[] = {
    2,5,8,3,7,1,4,6 };
	for (auto e : arr)
	{
   
		st.insert(e);
	}
	for (auto& s : st)
	{
   
		cout << s << " ";
	}
	cout << endl;
	set<int>::iterator it = st.find(3);//查找key值,成功返回迭代器
	if (it != st.end())//需要判断是否越界
	{
   
		st.<

你可能感兴趣的:(C++,C语言,哈希算法,数据结构,c++)