SGI

set<Key, Compare, Alloc>

类别: 容器 组件类型: 类型

描述

集合是一个 排序关联容器,它存储类型为Key. 集合的对象。它是一个 简单关联容器,这意味着它的值类型和键类型都是Key。它也是一个 唯一关联容器,这意味着没有两个元素是相同的。

集合以及多重集合特别适合集合算法包含, 集合并, 集合交, 集合差,以及集合对称差。原因有两个。首先,集合算法要求其参数是排序的范围,并且,由于集合以及多重集合排序关联容器,它们的元素总是按升序排序。其次,这些算法的输出范围总是排序的,将排序范围插入到集合多重集合是一个快速操作:唯一排序关联容器多重排序关联容器的要求保证,如果范围已排序,则插入范围只需线性时间。

集合具有重要的属性,即向集合中插入新元素不会使指向现有元素的迭代器失效。从集合中删除元素也不会使任何迭代器失效,当然,指向要删除的元素的迭代器除外。

示例

struct ltstr
{
  bool operator()(const char* s1, const char* s2) const
  {
    return strcmp(s1, s2) < 0;
  }
};

int main()
{
  const int N = 6;
  const char* a[N] = {"isomer", "ephemeral", "prosaic", 
                      "nugatory", "artichoke", "serif"};
  const char* b[N] = {"flat", "this", "artichoke",
                      "frigate", "prosaic", "isomer"};

  set<const char*, ltstr> A(a, a + N);
  set<const char*, ltstr> B(b, b + N);
  set<const char*, ltstr> C;

  cout << "Set A: ";
  copy(A.begin(), A.end(), ostream_iterator<const char*>(cout, " "));
  cout << endl;
  cout << "Set B: ";
  copy(B.begin(), B.end(), ostream_iterator<const char*>(cout, " "));   
  cout << endl;

  cout << "Union: ";
  set_union(A.begin(), A.end(), B.begin(), B.end(),
            ostream_iterator<const char*>(cout, " "),
            ltstr());   
  cout << endl;

  cout << "Intersection: ";
  set_intersection(A.begin(), A.end(), B.begin(), B.end(),
                   ostream_iterator<const char*>(cout, " "),
                   ltstr());    
  cout << endl;

  set_difference(A.begin(), A.end(), B.begin(), B.end(),
                 inserter(C, C.begin()),
                 ltstr());
  cout << "Set C (difference of A and B): ";
  copy(C.begin(), C.end(), ostream_iterator<const char*>(cout, " "));
  cout << endl;
}

定义

定义在标准头文件 set 中,以及非标准向后兼容的头文件 set.h 中。

模板参数

参数 描述 默认
Key 集合的键类型和值类型。这也定义为set::key_type以及set::value_type  
Compare 键比较函数,一个 严格弱排序,其参数类型为key_type;它返回true如果它的第一个参数小于它的第二个参数,则返回false否则。这也定义为set::key_compare以及set::value_compare. less<Key>
Alloc 集合分配器,用于所有内部内存管理。 alloc

模型

唯一排序关联容器简单关联容器

类型要求

公共基类

无。

成员

成员 定义位置 描述
value_type 容器 对象类型,T,存储在集合中。
key_type 关联容器 value_type.
key_compare 排序关联容器 函数对象,比较两个键以进行排序。
value_compare 排序关联容器 函数对象,比较两个值以进行排序。
pointer 容器 指向T.
reference 容器 指向T
const_reference 容器 指向T
size_type 容器 无符号整型类型。
difference_type 容器 有符号整型类型。
iterator 容器 迭代器,用于遍历集合.
const_iterator 容器 常量迭代器,用于遍历集合. (迭代器以及const_iterator是同一类型。)
reverse_iterator 可逆容器 迭代器,用于反向遍历集合.
const_reverse_iterator 可逆容器 常量迭代器,用于反向遍历集合. (Reverse_iterator以及const_reverse_iterator是同一类型。)
iterator begin() const 容器 返回一个iterator,指向集合.
iterator end() const 容器 返回一个iterator,指向集合.
reverse_iterator rbegin() const 可逆容器 返回一个reverse_iterator,指向反转后的集合的开头。
reverse_iterator rend() const 可逆容器 返回一个reverse_iterator,指向反转后的集合的末尾。
size_type size() const 容器 返回集合.
size_type max_size() const 容器 返回集合.
bool empty() const 容器 true如果集合的大小是0.
key_compare key_comp() const 排序关联容器 返回key_compare对象,由集合.
value_compare value_comp() const 排序关联容器 返回value_compare对象,由集合.
set() 容器 创建一个空的集合.
set(const key_compare& comp) 排序关联容器 创建一个空的集合,使用comp作为key_compare对象。
template <class InputIterator>
set(InputIterator f, InputIterator l)
[1]
唯一排序关联容器 创建一个具有范围副本的集合。
template <class InputIterator>
set(InputIterator f, InputIterator l,
    const key_compare& comp)
[1]
唯一排序关联容器 创建一个具有范围副本的集合,使用comp作为key_compare对象。
set(const set&) 容器 复制构造函数。
set& operator=(const set&) 容器 赋值运算符
void swap(set&) 容器 交换两个集合的内容。
pair<iterator, bool>
insert(const value_type& x)
唯一关联容器 插入x集合.
iterator insert(iterator pos, 
                const value_type& x)
唯一排序关联容器 插入x集合,使用pos中,作为插入位置的提示。
template <class InputIterator>
void insert(InputIterator, InputIterator)
[1]
唯一排序关联容器 将范围插入到集合.
void erase(iterator pos) 关联容器 删除pos.
size_type erase(const key_type& k) 关联容器 删除键为k.
的元素 关联容器 void erase(iterator first, iterator last)
删除范围内的所有元素。 关联容器 void clear()
删除所有元素。 关联容器 iterator find(const key_type& k) constk.
找到键为 唯一关联容器 size_type count(const key_type& k) constk.
计算键为 排序关联容器 iterator lower_bound(const key_type& k) constk.
找到第一个键不小于 排序关联容器 iterator upper_bound(const key_type& k) constk.
pair<iterator, iterator> 
equal_range(const key_type& k) const
排序关联容器 找到第一个键大于k.
bool operator==(const set&, 
                const set&)
找到一个范围,包含所有键为 Forward Container
bool operator<(const set&, 
               const set&)
找到一个范围,包含所有键为 测试两个集合是否相等。这是一个全局函数,而不是成员函数。

字典序比较。这是一个全局函数,而不是成员函数。

新成员集合所有集合的成员都定义在 唯一排序关联容器简单关联容器 要求中。

没有引入任何新成员。

注释[1] 此成员函数依赖于成员模板函数,目前(1998 年初)并非所有编译器都支持。如果您的编译器支持成员模板,则可以使用任何类型的 输入迭代器 调用此函数。但是,如果您的编译器尚未支持成员模板,则参数必须是类型const value_type*或类型.

set::const_iterator

另请参见关联容器排序关联容器简单关联容器唯一排序关联容器, 多重集合, 映射, 多重映射, 哈希集合, 哈希映射, 哈希多重集合
[Silicon Surf] [STL Home]
哈希多重映射 Copyright © 1999 Silicon Graphics, Inc. 保留所有权利。