STL
by lqx
vector
#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
vector<int>v1;
for(int i=0;i<=5;i++)v1.push_back(i); //012345
v1.pop_back(); //01234
reverse(v1.begin(),v1.end()); //43210
v1.erase(v1.begin()+2); //将v1[2]删除
for(auto i:v1)cout<<i;cout<<'\n'; //4310
vector<int>v2(10); //初始化10个0
v2.insert(v2.begin()+2,-1); //将-1插入v2[2]的位置
cout<<"v2.size():"<<v2.size()<<'\n'; //11
for(auto i:v2)cout<<i;cout<<'\n'; //00-100000000
vector<int>v3(7,4); //初始化7个4
v3.erase(v3.begin()+1,v3.begin()+3); //删除[first,last)元素
for(auto i:v3)cout<<i;cout<<'\n'; //44444
vector<int>v4{4,2,3,1,4,5,6}; //{}直接赋值
vector<int>v5(v4.begin(),v4.end()); //复制v4的元素
for(auto i:v5)cout<<i;cout<<'\n'; //4231456
//vector离散化模板:v.erase(unique(v.begin(),v.end()),v.end())
sort(v4.begin(),v4.end());
for(auto i:v4)cout<<i;cout<<'\n'; //1234456
v4.erase(unique(v4.begin(),v4.end()),v4.end());
for(auto i:v4)cout<<i;cout<<'\n'; //123456
vector<int>v[10]; //二维数组 v[0]~v[9]都是一个vector
//vector<vector<int> >v(10);等价
for(int i=1;i<5;i++)v[0].push_back(i);
for(int i=1;i<9;i++)v[1].push_back(i);
cout<<v[0].size()<<' '<<v[1].size()<<'\n'; //4 8
for(auto i:v[0])cout<<i;cout<<'\n'; //1234
for(auto i:v[1])cout<<i;cout<<'\n'; //12345678
return 0;
}
map
#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
map<int,string> mp1;
map<string,int> mp2;
mp1[1]="lqx";mp2["lqx"]=1;
mp1[2]="lts";mp2["lts"]=2;
mp1[3]="lzl";mp2["lzl"]=3;
mp1[4]="djy";mp2["djy"]=4;
cout<<mp1.size()<<' '<<mp2.size()<<'\n'; //4 4
for(int i=1;i<=4;i++)cout<<mp1[i]<<'\n';
string s;cin>>s;
cout<<mp2[s];
return 0;
}
unordered_map
-
unordered_map底层是用哈希表实现的,map底层是用红黑树实现的
-
unordered_map是不按键值排序的,插入的时间是O(logn),查询时间是O(1)
-
map是按键值排序的,插入的时间是O(logn),查询时间是O(logn)
-
unordered_map和map的使用几乎是一致的
#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
unordered_map<int,string> mp1;
unordered_map<string,int> mp2;
mp1[1]="lqx";mp2["lqx"]=1;
mp1[2]="lts";mp2["lts"]=2;
mp1[3]="lzl";mp2["lzl"]=3;
mp1[4]="djy";mp2["djy"]=4;
cout<<mp1.size()<<' '<<mp2.size()<<'\n'; //4 4
for(int i=1;i<=4;i++)cout<<mp1[i]<<'\n';
string s;cin>>s;
cout<<mp2[s];
return 0;
}
stack
#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
stack<int> s,t;
for(int i=1;i<=4;i++)s.push(i);
s.pop();
t.push(s.top());
cout<<s.size()<<'\n'; //3
while(!s.empty()){
cout<<s.top()<<' ';
s.pop();
} //3 2 1
cout<<'\n';
while(!t.empty()){
cout<<t.top()<<' ';
t.pop();
} //3
return 0;
}
queue
#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
queue<int> s,t;
for(int i=1;i<=4;i++)s.push(i),t.push(s.back());
cout<<s.size()<<'\n'; //4
cout<<s.front()<<' '<<s.back()<<'\n';//1 4
while(!s.empty()){
cout<<s.front()<<' ';
s.pop();
} //1 2 3 4
cout<<'\n';
while(!t.empty()){
cout<<t.front()<<' ';
t.pop();
} //1 2 3 4
return 0;
}
deque
#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
deque<int> s,t;
for(int i=1;i<=4;i++)s.push_back(i),t.push_back(s.back());
s.push_front(0);
s.push_back(5);
cout<<s.size()<<'\n'; //6
while(!s.empty()){
cout<<s.front()<<' ';
s.pop_front();
} //0 1 2 3 4 5
cout<<'\n';
t.pop_front();
t.pop_back();
cout<<t.size()<<'\n'; //2
while(!t.empty()){
cout<<t.front()<<' ';
t.pop_front();
} //2 3
return 0;
}
priority_queue
priority_queue默认大根堆,队首元素最大值
#include <bits/stdc++.h>
using namespace std;
int main(){
priority_queue<int> q1;//默认大顶堆
//priority_queue<int,vector<int>,less<int>> q1; 等价
priority_queue<int,vector<int>,greater<int>> q2;//小根堆
for(int i=1;i<=5;i++)q1.push(i);
for(int i=1;i<=5;i++)q2.push(i);
while(!q1.empty()){
cout<<q1.top();
q1.pop();
} //54321
cout<<'\n';
while(!q2.empty()){
cout<<q2.top();
q2.pop();
} //12345
cout<<'\n';
for(int i=1;i<=5;i++)q1.push(i);
for(int i=1;i<=5;i++)q2.push(i);
q1.pop();
q2.pop();
while(!q1.empty()){
cout<<q1.top();
q1.pop();
} //4321
cout<<'\n';
while(!q2.empty()){
cout<<q2.top();
q2.pop();
} //2345
return 0;
}
set
#include <bits/stdc++.h>
using namespace std;
int main(){
set<int> s;//自动排序去重
for(int i=5;i>0;i--)s.insert(i);
s.insert(9);
s.insert(3);
s.erase(2);
cout<<s.size()<<'\n';
for(auto i:s)cout<<i; //13459
cout<<'\n';
//查找元素 s.find(x)==s.end()?"N":"Y"
if(s.find(5)!=s.end())cout<<"5在集合里\n";
else cout<<"5不在集合里\n";
if(s.find(99)!=s.end())cout<<"99在集合里\n";
else cout<<"99不在集合里\n";
return 0;
}