STL(五)(queue篇)

  • 我發現之前一版在電腦上看 常用函數部分 沒有問題,由于是手打上去的,在手機上看會發生錯位問題,現已將電腦原版 常用函數部分 截圖改為圖片形式,不會再發生錯位問題,非常感謝大家的支持

  • ### priority_queue優先隊列出現頻率非常高,尤為重要(是一定要掌握的數據結構)

1.queue隊列

  • queue是一種先進先出(FIFO)的數據結構
  • queue提供了一組函數來操作和訪問元素,但它的功能相對較簡單

queue的定義和結構如下:?

template <class T, class Container = deque<T>>
class queue;
  • T:表示存儲在queue中的元素的類型。
  • Container:表示底層容器的類型,默認為deque,也可以使用其他容器類型,如list
  • queue的內部實現使用了底層容器來存儲元素,并且只能通過特定的函數來訪問和操作元素

以下是一些queue的常用函數:

### 這就像一個隊伍———————————————————————
pop出去 < ——  1  2  3  4  5  6  < —— push進來———————————————————————

2.priority_queue優先序列

  • priority_queue與普通的隊列不同,priority_queue中的元素是按照一定的優先級進行排序的
  • 默認情況下,priority_queue按照元素的值的從大到小進行排序,即最大元素位于隊列的前面

priority_queue的定義和結構如下:

template <class T,Container=vector<T>,class Compare=less<typename Container::value_type>>
class priority_queue;
  • T:表示存儲在priority queue中的元素的類型
  • Container:表示底層容器的類型,默認為vector,也可以使用其他容器類型,如deque
  • Compare:表示元素之間的比較函數對象的類型,默認為less即按照元素的值進行比較
  • priority_queue的內部實現使用了底層容器來存儲元素,并且只能通過特定的函數來訪問和操作元素

以下是一些priority_queue的常用函數:


### 介紹幾種優先隊列修改比較函數的方法

1.第一種

#include<bits/stdc++.h>
struct Compare{ //仿函數bool operator()(int a,int b){ //()重載 //自定義比較函數return a>b; //小根堆 }
};
int main(){std::priority_queue<int,std::vector<int>,Compare> pq;return 0;
}
  • 默認的是大根堆

2. 第二種

#include<bits/stdc++.h>
auto compare=[](int a,int b){//自定義比較函數,按照逆序排列return a>b; 
};
int main(){std::priority_queue<int,std::vector<int>,decltype(compare)>pq(compare);return 0;
}
  • ?### 如果優先隊列中的元素類型比較簡單,可以直接使用greater<T>來修改比較方法
  • priority_queue<int,vector<int>,greaterr<int>> pq;
    //std::greater函數對象定義在<functional>頭文件中

    3.deque雙端隊列

  • ?deque(雙端隊列)是一種容器,它允許在兩端進行高效的插入和刪除操作
  • deque是由一系列連續的存儲塊(緩沖區)組成的,每個存儲塊都存儲了多個元素
  • 這使得deque能夠在兩端進行快速的插入和刪除操作,而不需要移動其他元素

deque的定義和結構如下:

template <class T,class Allocator=allocator<T>>
class deque;
  • T:表示存儲在deaue中的元素的類型
  • Allocator:表示用于分配內存的分配器類型,默認為allocator,deque的內部實現使用了一系列的存儲塊(緩沖區),每個存儲塊存儲了多個元素,并且通過指針進行連接
  • 這種設計使得在兩端進行插入和刪除操作的時間復雜度為常數時間,即0(1)

###????????“單調隊列”將使用雙端隊列來實現(單純考察雙端隊列的并不常見)

以下是一些deque的函數:

  • ### 10~12個并不常見?

4.例題講解:

題號:lanqiao OJ 1113?

1.CLZ銀行問題

#include<bits/stdc++.h>
using namespace std;
int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int m;cin>>m;queue<string> V,N;while(m--){string op;cin>>op;//判斷是否為來到窗口//IN情況,推入nameif(op=="IN") {string name,q;cin>>name>>q;if(q=="V"){V.push(name);}else{N.push(name);} }//out情況,彈出nameelse{string q;cin>>q;if(q=="V"){V.pop();}else{N.pop();}} }//輸出VIP窗口namewhile(V.size()){cout<<V.front()<<"\n"; V.pop();} //輸出普通窗口namewhile(N.size()){cout<<N.front()<<"\n"; N.pop();} return 0;
}
  • ?每次都會彈出,隊列雖然是一種線性結構但它是不能遍歷的

題號:lanqiao OJ 741

2.合并果子

  • ### 這里用到一點點貪心
  • 1.先將1和2合并就消耗了3點體力,再將3和9合并就消耗了12點體力,共消耗15點體力
  • 2.先將2和9合并就消耗了11點體力,再將1和11合并就消耗了12點體力,共消耗23點體力
  • 方案1更省體力
  • 那么思路就是每次找到一大堆數字中拿出來最小的兩個求和,再放回去(使用優先隊列)
  • ### 這道題注意要開long long(int大概是2e9可能會超范圍)
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int n;cin>>n; //這里直接用隊列就好了,沒必要再存數組里 priority_queue<ll,vector<ll>,greater<ll>> pq; //類型比較簡單,默認是大根堆,要的是小根堆把less直接改成greaterfor(int i=1;i<=n;++i){ll x;cin>>x;pq.push(x);} ll ans=0;while(pq.size()>=2){//這里pop出來兩個最小的數,也就是小根堆頂部的兩個數 ll x=pq.top();pq.pop();ll y=pq.top();pq.pop();ans+=x+y; //求和pq.push(x+y); //把最小數的和push回去 } cout<<ans<<"\n"; return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/208163.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/208163.shtml
英文地址,請注明出處:http://en.pswp.cn/news/208163.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

A : DS靜態查找之順序查找

Description 給出一個隊列和要查找的數值&#xff0c;找出數值在隊列中的位置&#xff0c;隊列位置從1開始 要求使用帶哨兵的順序查找算法 Input 第一行輸入n&#xff0c;表示隊列有n個數據 第二行輸入n個數據&#xff0c;都是正整數&#xff0c;用空格隔開 第三行輸入t&…

Spring-retry失敗重試機制

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 前言一、引入依賴二、主啟動類上加EnableRetry三、Server層注意 四、失敗后回調方法總結 前言 提示&#xff1a;SpringBoot項目為例 原文鏈接&#xff1a;https://…

docker全解

docker全解 一、docker的基本概念 什么是docker? docker是一個開源的應用容器引擎&#xff0c;讓開發者可以打包他們的應用以及依賴包到一個可移植的鏡像中&#xff0c;然后發布到任何流行的Linux或Windows機器上&#xff0c;也可以實現虛擬化。容器是完全使用沙箱機制&#…

MIT線性代數筆記-第26講-對稱矩陣及正定性

目錄 26.對稱矩陣及正定性打賞 26.對稱矩陣及正定性 實對稱矩陣的特征值均為實數&#xff0c;并且一定存在一組兩兩正交的特征向量 這對于單位矩陣顯然成立 證明特征值均為實數&#xff1a; ? ???設一個對稱矩陣 A A A&#xff0c;對于 A x ? λ x ? A \vec{x} \lambda…

作業12.8

1. 使用手動連接&#xff0c;將登錄框中的取消按鈕使用qt4版本的連接到自定義的槽函數中&#xff0c;在自定義的槽函數中調用關閉函數。將登錄按鈕使用qt5版本的連接到自定義的槽函數中&#xff0c;在槽函數中判斷ui界面上輸入的賬號是否為"admin"&#xff0c;密碼是…

Matlab simulink PLL學習筆記

本文學習內容&#xff1a;【官方】2022小邁步之 MATLAB助力芯片設計系列&#xff08;一&#xff09;&#xff1a;電路仿真與模數混合設計基礎_嗶哩嗶哩_bilibili 時域模型 testbench搭建 菜單欄點擊simulink 創建空白模型 點擊庫瀏覽器 在PLL里面選擇一種架構拖拽到畫布。 如…

一文理解什么是交叉熵損失函數以及它的作用

今天看一個在深度學習中很枯燥但很重要的概念——交叉熵損失函數。 作為一種損失函數&#xff0c;它的重要作用便是可以將“預測值”和“真實值(標簽)”進行對比&#xff0c;從而輸出 loss 值&#xff0c;直到 loss 值收斂&#xff0c;可以認為神經網絡模型訓練完成。 那么這…

【Java用法】Hutool樹結構工具-TreeUtil快速構建樹形結構的兩種方式 + 數據排序

Hutool樹結構工具-TreeUtil快速構建樹形結構的兩種方式 數據排序 一、業務場景二、Hutool官網樹結構工具2.1 介紹2.2 使用2.2.1 定義結構2.2.2 構建Tree2.2.3 自定義字段名 2.3 說明 三、具體的使用場景3.1 實現的效果3.2 業務代碼3.3 實現自定義字段的排序 四、踩過的坑4.1 坑…

策略產品經理常用的ChatGPT通用提示詞模板

產品策略&#xff1a;請幫助我制定一個策略產品的產品策略。 市場調研&#xff1a;如何進行策略產品的市場調研&#xff1f; 競爭分析&#xff1a;如何進行策略產品的競爭分析&#xff1f; 用戶畫像&#xff1a;如何構建策略產品的用戶畫像&#xff1f; 產品定位&#xff1…

交換排序(冒泡排序)(快速排序(1))

目錄 1.交換排序 &#xff08;1&#xff09;冒泡排序 &#xff08;2&#xff09;快速排序 1.交換排序 基本思想&#xff1a;所謂交換&#xff0c;就是根據序列中兩個記錄鍵值的比較結果來對換這兩個記錄在序列中的位置&#xff0c;交換排序的特點是&#xff1a;將鍵值較大的…

ambari hive on Tez引擎一直卡住

hive on tez使用./bin/hive啟動后一直卡住&#xff0c;無法進入命令行 使用TEZ作為Hive默認執行引擎時&#xff0c;需要在調用Hive CLI的時候啟動YARN應用&#xff0c;預分配資源&#xff0c;這需要花一些時間&#xff0c;而使用MapReduce作為執行引擎時是在執行語句的時候才會…

iPaaS架構深入探討

在數字化時代全面來臨之際&#xff0c;企業正面臨著前所未有的挑戰與機遇。技術的迅猛發展與數字化轉型正在徹底顛覆各行各業的格局&#xff0c;不斷推動著企業邁向新的前程。然而&#xff0c;這一數字化時代亦衍生出一系列復雜而深奧的難題&#xff1a;各異系統之間數據孤島、…

基于SuperMap iObjects Java生成地圖瓦片

作者&#xff1a;dongyx 前言 在GIS領域&#xff0c;地圖瓦片技術作為GIS領域的關鍵技術&#xff0c;是提高地圖服務性能的關鍵手段之一。通過預先生成地圖的瓦片數據&#xff0c;可以顯著提升用戶訪問地圖時的響應速度和體驗。SuperMap iObjects for Java作為一款強大的GIS開…

Docker, Docker-compose部署Sonarqube

參考文檔 鏡像地址: https://hub.docker.com/_/sonarqube/tags Docker部署文檔地址 Installing from Docker | SonarQube Docs Docker-compose文檔部署地址&#xff1a; Installing from Docker | SonarQube Docs 部署鏡像 2.1 docker部署 # 宿主機執行 $. vi /etc/sysctl.conf…

Java注解詳解

概述 注解是對程序代碼進行標注和解釋的一種方式。在Java中&#xff0c;注解提供了一種元數據形式&#xff0c;能夠在程序中嵌入有關程序的信息&#xff0c;以便進行進一步的處理。注解通過使用符號來聲明&#xff0c;如Override、Deprecated等。 注解和注釋的區別 注釋&…

Unity中Batching優化的GPU實例化(4)

文章目錄 前言一、構建需要實例化的額外數據二、在頂點著色器&#xff0c;將實例化 ID 從 appdata 存入 v2f 傳給片元著色器三、在片斷著色器中訪問具體的實例化變量三、使用代碼修改Shader材質屬性&#xff0c;實現GPU實例化后不同對象顏色不同的效果1、在C#測試腳本生成小板凳…

ReactJs筆記摘錄

前言 以前2018年搞過一段時間react antd開發&#xff0c;兜兜轉轉又回到react世界。 TODO中 Hook函數 JSX語法 根元素與斜杠 注意局部的jsx片段也要加根元素: return (<div>{items.map((item) > (// 此處只能有一個根元素!!!<>...<div className&quo…

要求CHATGPT高質量回答的藝術:提示工程技術的完整指南—第 23 章:命名實體識別提示

要求CHATGPT高質量回答的藝術&#xff1a;提示工程技術的完整指南—第 23 章&#xff1a;命名實體識別提示 命名實體識別&#xff08;NER&#xff09;是一種允許模型對文本中的命名實體&#xff08;如人物、組織、地點和日期&#xff09;進行識別和分類的技術。 要在 ChatGPT…

微前端介紹

目錄 微前端概念 微前端特性 場景演示 微前端方案 iframe 方案 qiankun 方案 micro-app 方案 EMP 方案 無界微前端 方案 無界方案 成本低 速度快 原生隔離 功能強大 總結 前言&#xff1a;微前端已經是一個非常成熟的領域了&#xff0c;但開發者不管采用哪個現…

Leetcode—290.單詞規律【簡單】

2023每日刷題&#xff08;五十一&#xff09; Leetcode—290.單詞規律 實現代碼 class Solution { public:bool wordPattern(string pattern, string s) {unordered_map<char, string> m1;unordered_map<string, char> m2;stringstream stro(s);string tmp;for(a…