STL使用(二):关联式容器set

本文详细介绍了C++ STL中的set容器,包括其基本特性、常用操作如插入、查找、删除等方法及其时间复杂度,并提供了简单示例代码。同时对比了set与hashset的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

set: “集合” 是一个内部自动有序,且不含重复元素

(1)访问 iterator

set不提供直接存取元素的任何操作函数,只能通过迭代器间接访问

(2)插入 insert

将元素插入set容器中,并自动递增排序和去重,时间复杂度为O(logN) ;N为set内元素的个数

(3)查找 find

find(value) 返回值对于为value的迭代器,时间复杂度为O(logN);N为set内元素的个数

(4)删除 erase

  1. 删除单个元素

set.erase(value);

set.erase(iterator);

  1. 删除某个区间的元素

set.erase(iterator1,iterator2);

另外值得一提是multiset

注意点:
(1)特性 和 用法与set完全相同

(2)唯一的差别是允许键值重复
采用的插入操作,为RB-Tree的insert-equal而非insert-unique


下面不废话了,直接上代码:
(简单的使用举例)

#include <iostream>
#include <set>

using namespace std;

int main()
{
	set<int> set1;

	set<int>::iterator it;

	int length=5;

	for (size_t i = 0; i < length; i++)
	{
		set1.insert(i);
	}

	it = set1.begin();
	cout << *it << endl;
	// cout << *(it + 3) << endl; //error

	set<int>::iterator it1= set1.find(3);  //find return iterator
	set<int>::iterator it2= set1.find(3);

	cout << *it1 << endl;
	cout << *it2 << endl;

	set1.erase(it1, it2);

	set1.erase(set1.find(1));

	set1.erase(2);

	int size = set1.size();
	cout << size << endl;

	set1.clear(); // clear all the set;

	return 0;
}


注意:
(1)除开vector,string 之外的容器都不支持 *(iterator+i)的访问方式 // iterator 迭代器因此只能枚举
(2) set 中的元素实值就是键值,键值就是实值
因此不能通过迭代器来修改set内元素值,因为set 中的元素实值就是键值,关系到set元素的排列规则
(3)STL只规范复杂度与接口,并不规范是实现方法; 但是set大多以RB-Tree 实现为底层机制
RB-Tree有自动排序功能,而hashtable没有;
因此,hashset并没有自动排序的功能
(4)此外hashset和set的用法完全相同

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值