SGI

multiset<Key, Compare, Alloc>

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

描述

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

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

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

示例

int main()
{
  const int N = 10;
  int a[N] = {4, 1, 1, 1, 1, 1, 0, 5, 1, 0};
  int b[N] = {4, 4, 2, 4, 2, 4, 0, 1, 5, 5};

  multiset<int> A(a, a + N);
  multiset<int> B(b, b + N);
  multiset<int> C;

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

  cout << "Union: ";
  set_union(A.begin(), A.end(), B.begin(), B.end(),
            ostream_iterator<int>(cout, " "));
  cout << endl;

  cout << "Intersection: ";
  set_intersection(A.begin(), A.end(), B.begin(), B.end(),
                   ostream_iterator<int>(cout, " "));
  cout << endl;  

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

定义

在标准头文件 set 和非标准向后兼容头文件 multiset.h 中定义。

模板参数

参数 描述 默认值
Key 集合的键类型和值类型。这也被定义为multiset::key_typemultiset::value_type  
Compare 键比较函数,一个 严格弱排序,其参数类型为key_type;它返回true如果它的第一个参数小于它的第二个参数,否则返回false。这也被定义为multiset::key_comparemultiset::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 可逆容器 常量迭代器,用于反向遍历多重集合. (反向迭代器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对象,该对象由多重集合.
multiset() 容器 创建一个空多重集合.
multiset(const key_compare& comp) 排序关联容器 创建一个空多重集合,使用comp作为key_compare对象。
template <class InputIterator>
multiset(InputIterator f, InputIterator l)
[1]
多个排序关联容器 创建一个包含范围副本的多重集合。
template <class InputIterator>
multiset(InputIterator f, InputIterator l,
         const key_compare& comp)
[1]
多个排序关联容器 创建一个包含范围副本的多重集合,使用comp作为key_compare对象。
multiset(const multiset&) 容器 复制构造函数。
multiset& operator=(const multiset&) 容器 赋值运算符。
void swap(multiset&) 容器 交换两个多重集合的内容。
iterator 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) const 关联容器 查找键为k.
size_type count(const key_type& k) const 关联容器 统计键为k.
iterator lower_bound(const key_type& k) const 排序关联容器 查找第一个键不小于k.
iterator upper_bound(const key_type& k) const 排序关联容器 查找第一个键大于k.
pair<iterator, iterator> 
equal_range(const key_type& k) const
排序关联容器 查找包含所有键为k.
bool operator==(const multiset&, 
                const multiset&)
前向容器 测试两个多重集合是否相等。这是一个全局函数,而不是成员函数。
bool operator<(const multiset&, 
               const multiset&)
前向容器 字典序比较。这是一个全局函数,而不是成员函数。

新成员

所有多重集合的成员都在 多个排序关联容器简单关联容器 要求中定义。多重集合没有引入任何新成员。

注意

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

类型。另见

关联容器, 排序关联容器, 简单关联容器, 多个排序关联容器,集合, 映射, 多重映射, 哈希集合, 哈希映射, 哈希多重集合, 哈希多重映射
[Silicon Surf] [STL Home]
版权所有 © 1999 Silicon Graphics, Inc. 保留所有权利。 商标信息