关联容器 Set和Multiset

内容纲要

set和multiset

 内部元素有序排列,新元素插入的位置取决于它的值,查找速度快。

 除了各容器都有的函数外,还支持以下成员函数:

  • find: 查找等于某个值 的元素(x小于y和y小于x同时不成立即为相等)
  • lower_bound : 查找某个下界
  • upper_bound : 查找某个上界
  • equal_range : 同时查找上界和下界
  • count :计算等于某个值的元素个数(x小于y和y小于x同时不成立即为相等)
  • insert: 用以插入一个元素或一个区间

multiset

template
class multiset { …… };
  • Pred类型的变量决定了multiset 中的元素,“一个比另一个小”是怎么定义的。multiset运行过程中,比较两个元素x,y的大小的做法,就是生成一个 Pred类型的变量,假定为 op,若表达式op(x,y) 返回值为true,则 x比y小。
    Pred的缺省类型是 less。
  • less 模板的定义:
template
struct less : public binary_function
{ bool operator()(const T& x, const T& y) { return x < y ; } const; };
//less模板是靠 < 来比较大小的

multiset 的成员函数

iterator find(const T & val);
// 在容器中查找值为val的元素,返回其迭代器。如果找不到,返回end()。

iterator insert(const T & val);
// 将val插入到容器中并返回其迭代器。

void insert( iterator first,iterator last); 
// 将区间[first,last)插入容器。

int count(const T & val);
//  统计有多少个元素的值和val相等。

iterator lower_bound(const T & val);
// 查找一个最大的位置 it,使得[begin(),it) 中所有的元素都比 val 小。

iterator upper_bound(const T & val);
// 查找一个最小的位置 it,使得[it,end()) 中所有的元素都比 val 大。

pair equal_range(const T & val);
// 同时求得lower_bound和upper_bound。

iterator erase(iterator it);
//删除it指向的元素,返回其后面的元素的迭代器(Visual studio 2010上如此,但是在C++标准和Dev C++中,返回值不是这样)。

multiset 的用法

#include 
#include 
#include 
using namespace std;

template
void Print(T first, T last)
{
    for(; first != last; first++)

发表评论

邮箱地址不会被公开。 必填项已用*标注