【北京大学】程序设计实习 (C++版)第9周 STL-2

目录

第9周 STL-2

9-1  Set与Multiset     

9-2  Map与Multimap 

9-3  容器适配器     

9-4  算法

9-5  算法(续)     


第9周 STL-2

9-1  Set与Multiset     

关联容器

set, multiset, map, multimap

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

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

find: 查找等于某个值 的元素(x小于yy小于x同时不成立即为相等)

lower_bound : 查找某个下界

upper_bound : 查找某个上界

equal_range : 同时查找上界和下界

count :计算等于某个值的元素个数(x小于yy小于x同时不成立即为相等)

insert: 用以插入一个元素或一个区间

multiset的成员函数

 

9-2  Map与Multimap 

map的[ ]成员函数

若pairs为map模版类的对象,

pairs[key]

返回对关键字等于key的元素的值(second成员变量)的引用。若没有关键字为key的元素,则会往pairs里插入一个关键字为key的元素,其值用无参构造函数初始化,并返回其值的引用.如:

map<int,double> pairs;

pairs[50] = 5; 会修改pairs中关键字为50的元素,使其值变成5。若不存在关键字等于50的元素,则插入此元素,并使其值变为5。

9-3  容器适配器     

容器适配器

可以用某种顺序容器来实现

(让已有的顺序容器以栈/队列的方式工作)

1) stack: 头文件 <stack>

• 栈 -- 后进先出

2) queue: 头文件 <queue>

• 队列 -- 先进先出

3) priority_queue: 头文件 <queue>

• 优先级队列 -- 最高优先级元素总是第一个出列

都有3个成员函数:

• push: 添加一个元素;

• top: 返回栈顶部或队头元素的引用

• pop: 删除一个元素

容器适配器上没有迭代器

 STL中各种排序, 查找, 变序等算法都不适合容器适配器

stack

stack 是后进先出的数据结构

只能插入, 删除, 访问栈顶的元素

可用 vector, list, deque来实现

• 缺省情况下, 用deque实现

• 用 vector和deque实现, 比用list实现性能好

template<class T, class Cont = deque<T> >

class stack {

};

stack 中主要的三个成员函数:

• void push(const T & x);

将x压入栈顶

• void pop();

弹出(即删除)栈顶元素

• T & top();

返回栈顶元素的引用. 通过该函数, 可以读取栈顶

元素的值, 也可以修改栈顶元素

queue

和stack 基本类似, 可以用 list和deque实现

缺省情况下用deque实现

template<class T, class Cont = deque<T> >

class queue {

……

};

同样也有push, pop, top函数

• push发生在队尾

• pop, top发生在队头, 先进先出

 

priority_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

9-4  算法

STL算法分类

STL中的算法大致可以分为以下七类:

• 不变序列算法

• 变值算法

• 删除算法

• 变序算法

• 排序算法

• 有序区间算法

• 数值算法

后续加

9-5  算法(续)     

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值