【演算法學習】STL庫 大小根堆的用法
1.知識點:
①https://www.cnblogs.com/WindSun/p/11444446.html
②https://blog.csdn.net/fnzsjt/article/details/40118365
2.運用:
①https://blog.csdn.net/u013317445/article/details/89680330?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1.control
②https://xiaoneng.blog.csdn.net/article/details/103206628?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromBaidu-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromBaidu-1.control
3.例子:
①思路:
先用一個最小堆存message的優先順序,再定義一個map容器存message和優先順序。當讀取到GET時,取出最小堆頂,然後在map中輸出這個堆頂為關鍵字的value即message
②程式碼:
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;
map<int,string> Messages;//用來儲存message和優先順序
int main()
{
vector<int> min;//最小堆底層容器
int t;
string flag;
cin>>t;
while(t--){
cin>>flag;
if(flag=="PUT"){
string message;
int rank;
cin>>message>>rank;
min.push_back(rank);//在vector的末尾插入元素rank
Messages[rank]=message;
push_heap(min.begin(),min.end(), greater<int>());//push_head函式先是讓end迭代器+1(因為vector多了一個元素),然後執行sifedown通過下溯維護最小堆
}
if(flag=="GET"){
if(min.size()==0)
{
cout<<"EMPTY QUEUE!"<<endl;
}
else{
int number=min[0];
pop_heap(min.begin(),min.end(), greater<int>());//pop_heap把堆頂元素取出來,放到了ector容器的末尾,用原來的末尾元素去替代,然後end迭代器減1,執行siftdown()下溯函式來重新調整堆,此時不會算上末尾的那個元素,因為end減一了
min.pop_back();//這在底層vector資料容器中刪除最後一個元素,即上一步提出來的首元素
cout<<Messages[number]<<endl;
}
}
}
return 0;
}
相關文章
- STL學習
- 堆的學習
- STL 庫其中的 std::string用法總結
- 精通標準模板庫STL的向量Vector用法
- C++ 學習筆記之——STL 庫 queueC++筆記
- 大根堆和小根堆的介紹
- C++STL學習第一篇(什麼是STL以及string的各種功能用法)C++
- C++學習筆記 — STL標準模板庫C++筆記
- STL的內觀排序(introsort)演算法學習筆記 (轉)排序ROS演算法筆記
- 演算法學習之路|用C++刷演算法會用到的STL(一)——vector演算法C++
- 演算法學習之路|用C++刷演算法會用到的STL(二)——set演算法C++
- C++ STL學習——vectorC++
- 演算法學習之路|用C++刷演算法會用到的STL(三)——string演算法C++
- STL:set用法總結
- STL:map用法總結
- STL:vector用法總結
- STL:list用法總結
- 【C++ STL】Set用法C++
- STL的學習筆記之一 (轉)筆記
- 跟我學C++中級篇——STL的學習C++
- SGI STL學習筆記(3):copy演算法實現細節筆記演算法
- C++ STL學習之stack。C++
- STL 優先佇列 用法佇列
- STL中set用法詳解
- STL中map用法詳解
- Java入門學習-學習static的用法Java
- PHP 程式設計師的堆學習PHP程式設計師
- 堆溢位學習筆記筆記
- 原根學習筆記筆記
- STL 演算法集合演算法
- C++STL之Vector向量詳解,用法和例子 一起學習 一起加油C++
- 常用的 STL 查詢演算法演算法
- std::function用法學習Function
- C++ 學習筆記之 STL 佇列C++筆記佇列
- STL vector的內部實現原理及基本用法
- C++STL第二篇(vector的原理用法)C++
- STL::演算法::常見演算法演算法
- 智慧指標用法學習指標