类别: 容器 | 组件类型: 类型 |
集合和多重集合特别适合集合算法包含, 集合并, 集合交, 集合差,和集合对称差。原因有两个。首先,集合算法要求它们的论点是排序的范围,并且,由于集合和多重集合是 排序关联容器,它们的元素始终按升序排序。其次,这些算法的输出范围始终是排序的,并且将排序的范围插入到集合或多重集合是一个快速操作:唯一排序关联容器 和 多个排序关联容器 要求保证,如果范围已经排序,则插入范围只需要线性时间。
多重集合具有以下重要属性:将新元素插入到多重集合不会使指向现有元素的迭代器失效。从多重集合中删除元素也不会使任何迭代器失效,当然,指向正在删除的元素的迭代器除外。
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; }
参数 | 描述 | 默认值 |
---|---|---|
Key | 集合的键类型和值类型。这也被定义为multiset::key_type和multiset::value_type | |
Compare | 键比较函数,一个 严格弱排序,其参数类型为key_type;它返回true如果它的第一个参数小于它的第二个参数,否则返回false。这也被定义为multiset::key_compare和multiset::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.