0
点赞
收藏
分享

微信扫一扫

Redux数据流架构

Alex富贵 2024-05-03 阅读 16

图片名称

博主首页: 有趣的中国人

专栏首页: C++进阶

其它专栏: C++初阶 | 初阶数据结构 | Linux


    文章目录


      1. 关联式容器


      我已经在之前介绍过STL中的部分容器,比如:vector、list、deque、forward_list(C++11)等,这些容器统称为序列式容器,因为其底层为线性序列的数据结构,里面存储的是元素本身。

      关联式容器也是用来存储数据的,与序列式容器不同的是,其里面存储的是<key, value>(上一篇文章讲过)结构的键值对,在数据检索时比序列式容器效率更高。


        2. 树形结构的关联式容器


        根据应用场景的不同,STL总共实现了两种不同结构的管理式容器:树型结构与哈希结构。树型结构的关联式容器主要有四种:map、set、multimap、multiset。这四种容器的共同点是:使用平衡搜索树(即红黑树)作为其底层结果,容器中的元素是一个有序的序列。首先来看一下set


          3. set的介绍以及相关使用操作

          3.1 set的介绍


          链接:set介绍

          3.2 set的相关使用操作

          set的模板参数列表

          在这里插入图片描述

          • : set中存放元素的类型,实际在底层存储<value, value>的键值对。
          • Compare:set中元素默认按照小于来比较
          • Alloc:set中元素空间的管理方式,使用STL提供的空间配置器管理

          set的功能

          • set可以帮你完成去重+排序,例如:
          void settest1()
          {
          	set<int> s1;
          	s1.insert(1);
          	s1.insert(11);
          	s1.insert(3);
          	s1.insert(1);
          	s1.insert(4);
          	s1.insert(2);
          
          	for (auto e : s1)
          	{
          		cout << e << " ";
          	}
          }
          

          在这里插入图片描述

          set的构造函数

          在这里插入图片描述

          • 迭代器区间构造:
          void settest1()
          {
          	vector<int> v = { 3,2,8,1,10,2 };
          	set<int> s2(v.begin(), v.end());
          	for (auto e : s2)
          	{
          		cout << e << " ";
          	}
          	cout << endl;
          }
          

          在这里插入图片描述

          • Initializer_list构造:
          void settest1()
          {
          	set<int> s3 = { 3,2,8,1,10,2 };
          	for (auto e : s3)
          	{
          		cout << e << " ";
          	}
          	cout << endl;
          }
          

          set的删除

          在这里插入图片描述

          void settest1()
          {
          	set<int> s3 = { 3,2,8,1,10,2 };
          	for (auto e : s3)
          	{
          		cout << e << " ";
          	}
          	cout << endl;
          	s3.erase(8);
          	s3.erase(18);
          	for (auto e : s3)
          	{
          		cout << e << " ";
          	}
          	cout << endl;
          }
          

          在这里插入图片描述

          set的查找

          在这里插入图片描述

          void settest1()
          {
          	set<int> s3 = { 3,2,8,1,10,2 };
          	for (auto e : s3)
          	{
          		cout << e << " ";
          	}
          	cout << endl;
          	s3.erase(8);
          	s3.erase(18);
          	for (auto e : s3)
          	{
          		cout << e << " ";
          	}
          	cout << endl;
          
          
          	auto pos = s3.find(10);
          	if (pos != s3.end())
          	{
          		cout << *pos << endl;
          		s3.erase(pos);
          	}
          	else
          	{
          		cout << "找不到" << endl;
          	}
          	for (auto e : s3)
          	{
          		cout << e << " ";
          	}
          	cout << endl;
          }
          

          在这里插入图片描述

          lower_bound和upper_bound

          在这里插入图片描述
          在这里插入图片描述

          • lower_bound>= x 的值,返回第一个 >= x 的值的位置
          • upeer_bound>x 的值,返回第一个 >x 的值的下一个位置
          void settest2()
          {
          	std::set<int> myset;
          	for (int i = 1; i < 10; i++)
          		myset.insert(i * 10); // 10 20 30 40 50 60 70 80 90
          
          	for (auto e : myset)
          	{
          		cout << e << " ";
          	}
          	cout << endl;
          
          	auto itlow = myset.lower_bound(25);                // >= x
          	auto itup = myset.upper_bound(60);                 // > x
          
          	// [30, 70)
          	myset.erase(itlow, itup);                     // 10 20 70 80 90
          
          	for (auto e : myset)
          	{
          		cout << e << " ";
          	}
          	cout << endl;
          }
          

          在这里插入图片描述

          举报

          相关推荐

          0 条评论