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::first 与lower_bound 相同,pair::second 与upper_bound 相同
集合所有元素唯一,故最多包含一个元素。
找不到匹配项,则返回的范围长度为零,两个迭代器都指向根据容器的内部比较对象 (key_comp) 被认为是 val 之后的第一个元素。
pair<iterator,iterator> equal_range (const value_type& val) const;
Allocator
get_allocator
allocator_type get_allocator() const;
|