C++标准模版库STL关联容器之Set容器

关联容器概述

关联容器(associative container)并不是C++11才有的概念,之所以叫关联容器是因为容器中的元素是通过关键字来保存和访问的,与之相对的是顺序容器(sequence container),其中的元素是通过它们在容器中的位置来保存和访问的。

关联容器主要有映射(map)和集合(set),支持通过键来高效地查找和读取元素。map的元素以键-值对(key-value)的形式组织:键用作元素在map类型下进行索引,而值则表示所存储和读取的数据。set仅包含一个键,并有效地支持关于某个键是否存在的查询。set和map类型的对象不允许为同一个键添加第二个元素。如果一个键必须对应多个实例,则需使用多重映射(multimap)或多重集合(mutiset)类型,这两种类型允许多个元素拥有相同的键。

set类容器

set类容器内元素的访问

示例

#include<stdio.h>
#include<set>
using namespace std;

int main()
{
    
    
	set<int> st;
	st.insert(3);
	st.insert(5);
	st.insert(2);
	st.insert(3);
	
	for(set<int>::iterator it = st.begin(); it != st.end(); it++)
	{
    
    
		printf("%d ", *it);
	}
	return 0;
}

运行结果:
在这里插入图片描述
可以发现,set内的元素自动递增排序,且自动去除了重复元素

set常用函数实例解析

insert()

在这里插入图片描述

find()

find(value)返回set中对应值为value的迭代器

示例代码:

#include<stdio.h>
#include<set>
using namespace std;

int main()
{
    
    
	set<int> st;
	for(int i = 1; i <= 3; i++)
	{
    
    
		st.insert(i);
	} 
	set<int>::iterator it = st.find(2);
	printf("%d\n", *it);
	return 0;
}

运行结果:
在这里插入图片描述

erase()

  • 删除单个元素
    • st.erase(value),e.g. st.erase(100);
    • st.erase(it),it为元素的迭代器
      示例代码:
#include<stdio.h>
#include<set>
using namespace std;

int main()
{
    
    
	set<int> st;
	st.insert(100);
	st.insert(200);
	st.insert(100);
	st.insert(300);
	st.erase(st.find(100));
	st.erase(st.find(200));
	for(set<int>::iterator it = st.begin(); it != st.end(); it++)
	{
    
    
		printf("%d\n", *it);
	}
	return 0;
}

运行结果:
在这里插入图片描述

  • 删除一个区间内的元素
    删除[first,last)区间内的元素
    示例代码:
#include<stdio.h>
#include<set>
using namespace std;

int main()
{
    
    
	set<int> st;
	st.insert(20);
	st.insert(10);
	st.insert(40);
	st.insert(30);	
	set<int>::iterator it = st.find(30);
	st.erase(it, st.end());
	for(set<int>::iterator it = st.begin(); it != st.end(); it++)
	{
    
    
		printf("%d\n", *it);
	}
	return 0;
}

运行结果:
在这里插入图片描述

size()

获取set内元素个数

示例代码:

#include<stdio.h>
#include<set>
using namespace std;

int main()
{
    
    
	set<int> st;
	st.insert(2);
	st.insert(5);
	st.insert(4);
	printf("%d\n", st.size());
	return 0;
}

运行结果:
在这里插入图片描述

clear()

清空set中所有元素

示例代码:

#include<stdio.h>
#include<set>
using namespace std;

int main()
{
    
    
	set<int> st;
	st.insert(2);
	st.insert(5);
	st.insert(4);
	st.clear(); 
	printf("%d\n", st.size());
	return 0;
}

运行结果:
在这里插入图片描述

之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!

猜你喜欢

转载自blog.csdn.net/qq_44631615/article/details/112259571
今日推荐