c++map,queue

本文深入探讨了C++标准模板库(STL)中的两种容器:map和queue。map作为映射容器,能够高效地实现关键字与值的对应,提供快速查找和删除功能。同时,介绍了queue的基本操作及其优先级队列的应用,展示了如何利用二叉树结构确保容器顶部元素始终最大。

map

c++中的map是stl中的一种关联容器,可以说是映射,每个关键字在map中值出现一次,指向其指向的内容,map中会自动形成红黑树,使得内部的数据得以有序存储。

功能:

建立key与value对应,一个key只对应一个value,但一个value可能对应多个key,其查找和删除都有很快的速度,可以根据key来修改value的数值。

使用map要有头文件#include<map>;

定义一个类型:map<int ,string> val;

基本使用:

val.size();求元素个数

find()可以寻找一个键是否存在

count()找一个键出现几次

val.insert() 插入一个元素

begin()指向map第一个元素(迭代器)

clear() 清空所有元素

lower_bound()    返回键值>=给定元素的第一个位置

upper_bound()     返回键值>给定元素的第一个位置

swap()            交换两个容器元素

 rbegin()         返回一个指向map尾部的逆向迭代器

rend()           返回一个指向map头部的逆向迭代器       //加值后,迭代器指向向左移

 

queue

同其他容器一样,定义在#include<queue>; 

一些基本操作:

back()  返回容器中的最后一个元素

empty() 容器为空返回bool true 否则为flase

front()  返回容器第一个元素

pop()   删除容器第一个元素

push()   在容器末尾加入一个元素

size()   返回容器元素的个数

但是queue可以定义优先级,就是priority_queue,这是一个优先队列,用二叉树建立,每个值和上面的值比较,大则交换,这样可以保证容器中最上方的数是最大的,可以以此进行多种排队优先问题的解决。

 

### C++ 中 `queue` 的基本概念 队列(Queue)是一种遵循先进先出 (FIFO, First In First Out) 原则的数据结构。C++ 标准模板库提供了 `std::queue` 容器适配器,用于实现队列功能。 ### 创建和初始化 Queue 要使用 `std::queue`,需包含头文件 `<queue>` 并声明一个特定类型的队列对象: ```cpp #include <iostream> #include <queue> int main() { std::queue<int> q; } ``` ### 主要操作方法 #### 添加元素到队尾 (`push`) 向队列添加新元素会将其放置在队列末端[^1]。 ```cpp q.push(10); q.push(20); ``` #### 移除队首元素 (`pop`) 移除并丢弃位于队列前端的第一个元素。 ```cpp if (!q.empty()) { q.pop(); } ``` #### 访问队首元素 (`front`) 和 队尾元素 (`back`) 可以访问但不删除最前面或最后面的元素。 ```cpp if (!q.empty()) { int frontElement = q.front(); // 获取第一个元素 int backElement = q.back(); // 获取最后一个元素 } ``` #### 判断队列是否为空 (`empty`) 检查当前是否有任何存储于其中的元素。 ```cpp bool isEmpty = q.empty(); ``` #### 获取队列大小 (`size`) 返回目前存在于容器内的项目数量。 ```cpp size_t countElements = q.size(); ``` ### 使用 Range-Based For 循环遍历 Queue 尽管可以直接通过迭代器来遍历标准容器如 `vector` 或者关联式容器比如 `map`,但是由于 `queue` 设计上并不支持随机访问其内部成员,因此无法直接应用范围for循环进行遍历。如果确实需要逐项处理所有元素,则应考虑其他替代方案,例如将数据复制到另一个可迭代的标准序列中再执行所需的操作[^2]。 为了展示如何利用辅助函数配合范围for语句完成这一目标,下面给出一段示范代码片段: ```cpp template<typename T> void process_queue(std::queue<T>& sourceQ) { while(!sourceQ.empty()){ const auto& item = sourceQ.front(); std::cout << "Processing element: " << item << "\n"; sourceQ.pop(); } } // Usage example: std::queue<std::string> stringQueue; stringQueue.push("First"); stringQueue.push("Second"); process_queue(stringQueue); // This will print each element as it processes them. ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值