C++常用資料結構備忘
阿新 • • 發佈:2019-01-09
1.優先佇列(priority_queue):堆排序
常用函式:
-
push(value):放入元素
-
pop():刪除優先順序最高的元素
-
top():返回優先順序最高的元素
#include <vector> #include<queue> #include <iostream> using namespace std; struct cmp {//過載比較函式 bool operator()(int a,int b) { return a < b; } }; int main() { priority_queue<int,vector<int>,cmp> q;//第一個為儲存的型別,第二個為儲存方式,第三個為比較器 q.push(15); q.push(455); q.push(1); q.push(3); q.push(2); while(!q.empty()) { cout << q.top() << endl; q.pop(); } return 0; }
2.vector:可以用作佇列(先進先出),棧(最後進最後出),list(順序表):
主要用到的函式:
- push_back(value):追加到最後
- back():獲取最後的元素
- front():獲取第一個元素
- erase(迭代元素):刪除元素:erase(v1.begin() + i):刪除下標為i的元素
-
insert():插入元素;insert(v1.begin()+i,value):插入到下標為i的位置
#include<iostream> #include<string> #include<vector> using namespace std; void stack() { vector<int> v1; v1.push_back(12); v1.push_back(13); v1.push_back(14); v1.push_back(15); while (!v1.empty()) { cout << v1.back() << endl;//匯出最後的元素 v1.pop_back(); } } void queue() { vector<int> v1; v1.push_back(12); v1.push_back(13); v1.push_back(14); v1.push_back(15); while (!v1.empty()) { cout << v1.front() << endl;//匯出最後的元素 v1.erase(v1.begin()); } } void list() { vector<int> v1; v1.push_back(12); v1.insert(v1.begin() + 1,11); v1.insert(v1.begin() + 1,56); v1.insert(v1.begin() + 1,88); for (int i = 0; i < v1.size(); i++) { cout << v1[i] << endl; } } int main() { // stack(); // queue(); list(); return 0; }
3.map:(對映表)
常用函式:
- map[key]=value;直接插入
- map[key];直接獲取
- count(key):檢視是否有key,如果有返回1,否則返回0
- find(key):返回迭代器元素
- erase(迭代器元素):刪除元素;erase(myMap.find(key));刪除key的元素
#include<iostream> #include<map> #include<string> using namespace std; //定義學生id和學號的關係,遍歷 void foreach() { map<int, string > myMap; //新增元素 myMap[1] = "5120162154"; myMap[2] = "1547784655"; myMap[3] = "88786656455"; //遍歷 map<int, string>::iterator it; for (it = myMap.begin(); it != myMap.end(); it++) { cout << it->first << " " << it->second << endl; } } //對每個人的成績累加 void demo() { int n = 10; map<int, int> scores;//每個人的總分 for (int i = 0; i < n; i++) { int id = i % 2; if (!scores.count(id)) { scores[id]=0; cout << "第一次得分,初始化為0\n"; } scores[id] += i; } //刪除元素 if (scores.count(33)) { scores.erase(scores.find(33)); } map<int, int>::iterator it; for (it = scores.begin(); it != scores.end(); it++) { cout << it->first << " " << it->second << endl; } } int main() { foreach(); demo(); }