C++STL关联容器01-Set

本文详细解读C++ STL中的set容器,包括构造函数、析构函数、迭代器、容量管理、插入、删除、查找、比较器和分配器等核心内容,适合理解关联容器在有序集合中的应用。

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

set 容器通过键访问单个元素通常比unordered_set 容器慢,但它们允许根据它们的顺序直接迭代子集。
实现为二叉搜索树

(constructor)

empty (1)	
explicit set (const key_compare& comp = key_compare(),const allocator_type& alloc = allocator_type());
range (2)	
template <class InputIterator>
set (InputIterator first, InputIterator last, const key_compare& comp = key_compare(),const allocator_type& alloc = allocator_type());
copy (3)	
set (const set& x);

(destructor)

Iterators

begin,cbegin,rbegin,crbegin

end,cend,rend,crend

Capacity

empty

return size==0

bool empty() const noexcept;

size

返回容器存储的元素数

size_type size() const noexcept;

max_size

返回容器能够容纳的最大元素个数

size_type max_size() const noexcept;

Modifier

insert

插入时查看是否已有元素。若没有插入并返回迭代器,若有则不插入并返回现有元素迭代器。

对于插入元素,根据比较标准会插入其应在位置以保证有序。

单元素版本 (1) 返回一对,其成员 pair::first 设置为指向新插入元素或集合中已有的等效元素的迭代器。如果插入了新元素,则pair::second 元素设置为true,如果等效元素已存在,则设置为false

带有提示 (2) 的版本返回一个迭代器,该迭代器指向新插入的元素或集合中已经具有相同值的元素。

single element (1)	
pair<iterator,bool> insert (const value_type& val);
pair<iterator,bool> insert (value_type&& val);
with hint (2)	
iterator insert (const_iterator position, const value_type& val);
iterator insert (const_iterator position, value_type&& val);
range (3)	
template <class InputIterator>
void insert (InputIterator first, InputIterator last);
initializer list (4)	
void insert (initializer_list<value_type> il);

erase

从集合容器中移除单个元素或一系列元素 [first,last)(左闭右开)。

返回值
对于基于值的版本 (2),该函数返回擦除的元素数。其他版本返回一个迭代器,指向最后一个被移除元素之后的元素(或 set::end,如果最后一个元素被移除)

(1)	
iterator  erase (const_iterator position);
(2)	
size_type erase (const value_type& val);
(3)	
iterator  erase (const_iterator first, const_iterator last);

swap

依旧是所有迭代器、引用和指针对交换的对象仍然有效

void swap (set& x);

clear

void clear() noexcept;

emplace

对于插入元素,根据比较标准会插入其应在位置以保证有序。

template <class... Args>
pair<iterator,bool> emplace (Args&&... args);

emplace_hint

在集合中插入一个新元素(如果唯一),并带有插入位置的提示(函数使用此提示开始搜索插入点,可以加快搜索插入位置速度)。这个新元素是使用 args 作为构造参数就地构造的。

template <class... Args>
iterator emplace_hint (const_iterator position, Args&&... args);

Observers

key_comp

返回容器使用的比较对象的副本

默认情况下,返回与 operator< 相同的对象

key_compare key_comp() const;

value_comp

在集合容器中,对元素进行排序的键是值本身。
因此在集合中,key_comp 与 value_comp是等效的。

value_compare value_comp() const;

Operations

find

找到返回对应迭代器,没找到返回 set::end

const_iterator find (const value_type& val) const;
iterator       find (const value_type& val);

count

在容器中搜索与 val 等效的元素并返回匹配的数量,因唯一所以仅返回1和0

size_type count (const value_type& val) const;

lower_bound

返回一个对应值或其之后(其应该所处位置之后的那个元素)的迭代器。

返回调用key_comp(element,val) 返回false的第一个元素

      iterator lower_bound (const value_type& val);
const_iterator lower_bound (const value_type& val) const;

upper_bound

返回到 key_comp(val,element) 将返回 true 的第一个元素

iterator upper_bound (const value_type& val) const;

equal_range

pair::firstlower_bound 相同,pair::secondupper_bound 相同

集合所有元素唯一,故最多包含一个元素。

找不到匹配项,则返回的范围长度为零,两个迭代器都指向根据容器的内部比较对象 (key_comp) 被认为是 val 之后的第一个元素

pair<iterator,iterator> equal_range (const value_type& val) const;

Allocator

get_allocator

allocator_type get_allocator() const;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值