c++关联式容器

set multiset 容器

set 概念

  • set是个集合容器,其中所包含的元素是唯一的,集合的元素按照一定的顺序排列,元素插入按照一定规则插入,所以不能指定插入位置
  • set采用红黑树变体的数据结构实现,红黑树属于平衡二叉树,在插入和删除上比vector快。
  • set与multiset的区别:set 支持唯一的键值,每个元素值只能出现一次,而multiset一值可以出现多次。
  • 不可以直接修改set容器和multiset容器的值
#include<iostream>
#include<array>
#include<set>
void testSet()
{
	array<int , 5> = {1 , 2 , 3 , 4 , 5};
	//构造函数
	set<int> nset(arr.begin() , arr.end());
	//插入数据
	nset.insert(88);
	nset.insert(66);
	//获取数据
	for(set<int>::iterator it = nset.begin();it != nset.end();it++)
	{
		cout<<*it<<" ";
	}
	//开始遍历
	for(const int n : nset)
	{
		cout<<n<<" ";
	}
	//查找数据
	auto find_it = nset.find(88);
	if(find_it != nest.end())
	{
		cout<<"已找到"<<*findIt;  //迭代器返回
	}
	
	//删除数据
	nset.erase(findIt);

	//就地构造:就是在元素是类对象时
	nset.emplace(100);
	//升序
	set<int , greater<>>gSet = { 3 , 8 , 1 , 5 ,35 };
	
}

int main()
{
	testSet();
}

set自定义的类

#include<iosteam>
#include<set>

int main()
{
	//统计元素个数
	set<int> nset = { 1, 2 , 3 , 4 , 5 };
	size_t cnt = nset.count(5);
	multiset<int> mset = { 1, 2 , 3 , 4 , 5 };
	cnt = mset.count(1); //统计1的数量

	//查找
	pair<set<int>::iterator,set<int>::iterator> it = nset.equal_range(5);
	if(pa.first  != nset.end())
	{
		cout<<*pa.first<<endl;
	}
	
	
}

map概念

map是关联容器,用于存储特定顺序由键值和映射值形成的元素,它基于key的快速检索能力。
map中的key是唯一的值,集合中的元素按一定顺序排列,元素插入过程是按照排序规则插入,所以不能指定插入位置。
map中具体实现是采用红黑二叉树变体的平衡二叉树的数据结构,在插入操作和删除操作比vector快。
map可以直接存储key所对应的value。

#include<iostream>
#include<map>
#include<string>


void TestMap()
{
	//学号 姓名
	map<int string> stus;
	//匿名构造
	stus.insert( { 0 , "木槿家的巷港"} );
	//就地构造
	stus.emplace( 3 , "xx");

	//访问元素
	string& name = stus.at(3);
	//下标法访问元素
	string& name1 = stus[3];
	//下标访问需要注意
	stus[3] =  "kdsh";
	name1 = stus[3];
} 
int main()
{
	TestMap();
}

STL共性机制

STL容器所提供的都是值,而非引用的寓意,也就是说当给我们给容器插入值的时候,容器内部实现了拷贝的动作,将我们要插入的元素另行拷贝到另外的一容器中,而不是将原本的数据直接放入原来的容器中,也就是说我们提供的数据必需能够进行拷贝。

  • 除了queue和stack之外,每个容器都提供可放回迭代器函数,运用返回迭代器函数可以访问元素。
  • 通过STL不会抛异常,需要使用者传入正确的参数。
  • 每个容器都提供一个构造函数和拷贝构造函数。
  • 大小相关构造方法
    (1) size()返回容器元素个数。
    (2)empty()判断容器是否为空。

以上均是学习笔记,如有问题请指正,争取做到日更。加油!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我只爱炸鸡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值