分享

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

 quandsu 2013-09-04

5multimap

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

6set

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

typedef Key value_type;

typedef Cmp value_compare

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

7multiset

该标准关联容器是一个定义在 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):返回mk的出现次数 

插入元素用 insert 

附:pair模板

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

pair模板类支持如下操作:

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

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

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

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

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

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、容器适配类

8stack

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

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

stack 上可以进行以下操作:

push:  插入元素

pop: 弹出元素

top: 返回栈顶元素的引用

9queue   

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

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

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

10priority_queue 

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

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

和 queue类似,可以用vectordeque实现,缺省情况下用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

11string

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

12valarray

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

13bitset

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多