标准模板类(STL)(三),具体容器简介

5、multimap

    该标准关联容器是一个定义在 namespace std 中的模板,该模板的原型声明在头文件 <map> 中。multimap 除了元素对的关键字不必须唯一外,其他与 map 相同。

6、set

该标准关联容器是一个定义在 namespace std 中的模板,该模板的原型声明在头文件 <set> 中。 set 可以被视为只有关键字(注:Hash table, storing keys only)而没有相关的映射值的 map,因此 set 的用户接口也发生了微小的变化,即成员类型中没有:

typedef Key value_type;

typedef Cmp value_compare

操作中没有元素的下标访问操作。

7、multiset

该标准关联容器是一个定义在 namespace std 中的模板,该模板的原型声明在头文件 <set> 中。multiset 除了元素不必须唯一外,与 set 相同。

除了各容器都有的函数外,还支持以下成员函数:设m表容器,k表键值

m.find(k):如果容器中存在键为k的元素,则返回指向该元素的迭代器;如果不存在,则返回end()值。 

m.lower_bound(k):返回一个迭代器,指向键不小于k的第一个元素; 

m.upper_bound(k):返回一个迭代器,指向键大于k的第一个元素 ;

m.count(k):返回m中k的出现次数 

插入元素用 insert 

附:pair模板

    pair模板类用来绑定两个对象为一个新的对象,该类型在<utility>头文件中定义。

pair模板类支持如下操作:

pair<T1, T2> p1:创建一个空的pair对象,它的两个元素分别是T1和T2类型,采用值初始化

pair<T1, T2> p1(v1, v2):创建一个pair对象,它的两个元素分别是T1和T2类型,其中first成员初始化为v1,second成员初始化为v2

make_pair(v1, v2):以v1和v2值创建一个新的pair对象,其元素类型分别是v1和v2的类型

p1 < p2字典次序:如果p1.first<p2.first或者!(p2.first < p1.first)&& p1.second<p2.second,则返回true

p1 == p2:如果两个pair对象的first和second成员依次相等,则这两个对象相等。

p.first:返回p中名为first的(公有)数据成员

p.second:返回p中名为second的(公有)数据成员

multimap中的元素由 <关键字,值>组成,每个元素是一个pair对象。multimap 中允许多个元素的关键字相同。元素按照关键字升序排列,缺省情况下用 less<Key> 定义关键字的“小于”关系。

#include <set>

#include <iostream>

using namespace std;

int main()  {

 typedef set<double,less<double> > double_set;

 const int SIZE = 5;

 double a[SIZE] = {2.1,4.2,9.5,2.1,3.7 };

 double_set doubleSet(a,a+SIZE);

 ostream_iterator<double> output(cout," ");

 cout << "1) ";

 copy(doubleSet.begin(),doubleSet.end(),output);

 cout << endl;

      pair<double_set::const_iterator, bool> p;

      p = doubleSet.insert(9.5); 

      if( p.second ) 

 cout << "2) " << * (p.first)  << " inserted" << endl;

      else

            cout << "2) " << * (p.first)  << " not inserted" << endl;

      return 0; }

输出:

1) 2.1 3.7 4.2 9.5

2) 9.5 not inserted

C、容器适配类

8、stack

    栈。是项的有限序列,并满足序列中被删除、检索和修改的项只能是最近插入序列的项。即按照后进先出的原则。

这个容器转接器是一个定义在 namespace std 中的模板,该模板的原型声明定义在头文件 <stack> 中。缺省情况下,用deque实现,用 vector和deque实现,比用list实现性能好。

stack 上可以进行以下操作:

 push:  插入元素

 pop: 弹出元素

 top: 返回栈顶元素的引用

9、queue   

    队列。插入只可以在尾部进行,删除、检索和修改只允许从头部进行。按照先进先出的原则。

 这个容器转接器是一个定义在 namespace std 中的模板,该模板的原型声明定义在头文件 <queue> 中。

    和stack 基本类似,可以用 list和deque实现,缺省情况下用deque实现。同样也有push,pop,top函数但是push发生在队尾,pop,top发生在队头,先进先出。

10、priority_queue 

    优先级priority_queue队列。最高优先级元素总是第一个出列

 该容器转接器是一个定义在 namespace std 中的模板,该模板的原型声明定义在头文件 <queue> 中。

和 queue类似,可以用vector和deque实现,缺省情况下用vector实现。priority_queue 通常用堆排序技术实现,保证最大的元素总是在最前面。即执行pop操作时,删除的是最大的元素,执行top操作时,返回的是最大元素的引用。默认的元素比较器是 less<T>。

#include <queue>

#include <iostream>

using namespace std;

int main()  {

 priority_queue<double> priorities;

 priorities.push(3.2);

 priorities.push(9.8);

 priorities.push(5.4);

 while( !priorities.empty() ) {

  cout << priorities.top() << " ";    priorities.pop();

 }

     return 0;

//输出结果:9.8 5.4 3.2

11、string

basic_string 是一个定义在 namespace std 中的模板,该模板的原型声明在头文 <string> 中。basic_string 提供了下标访问操作、随机访问循环字和一个容器的几乎所有的符号工具。不过 basic_string 不提供选择字符以外的其他类型作为容器的元素类型的功能。

12、valarray

valarray是一个定义在 namespace std 中的模板,该模板的原型声明在头文件 <valarray> 中。valarray 是一个用于优化数值计算的向量,但是不能试图将它作为一个通用容器。valarray 提供了许多有用的特定数值操作,然而对于标准的容器通用操作,它只提供了 size 和下标访问操作。用于 valarray 的循环子是随机访问循环子。

13、bitset

bitset是一个定义在 namespace std 中的模板,该模板的原型声明在头文件 <bitset> 中。在系统中经常用一个标志集合(这些标志指示一些如 good/bad,  true/false 和 on/off 等双态值)来表示状态。bitset 通过产生一个 N 位的小集合和大量的相应的位操作为实现上述需求提供高效、方便的工具。bitset 提供的操作有两类,一类是对整个集合操作,而另一类是位操作。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值