1.vector<node>Q 的排序是咋样的
#include<bits/stdc++.h>
using namespace std;
struct node
{
int a,b;
node(int a1,int b1):a(a1),b(b1){}
friend bool operator < (node A,node B){
if(A.a==B.a){
return A.b>B.b;
}
else return A.a>B.a;
}
};
int main()
{
vector<node>Q;
Q.push_back(node(1,2));
Q.push_back(node(1,3));
Q.push_back(node(2,1));
sort(Q.begin(),Q.end());
vector<node>::iterator it;
for(it=Q.begin();it!=Q.end();++it){
cout<<(it->a)<<" "<<(it->b)<<endl;
}
return 0;
}
可以看出这按照我们想要的顺序来的
2.vector<pair<int,int> >Q,的排序
#include<bits/stdc++.h>
using namespace std;
int main()
{
vector<pair<int,int> >Q;
Q.push_back(make_pair(2,4));
Q.push_back(make_pair(2,3));
Q.push_back(make_pair(1,10));
sort(Q.begin(),Q.end());
vector<pair<int,int> >::iterator it;
for(it=Q.begin();it!=Q.end();++it){
cout<<(it->first)<<" "<<(it->second)<<endl;
}
return 0;
}
这个是按从小到大的排序,第一个元素小那么就在前面,如果第一个相等那么就按照第二个从小到大排序
3.优先队列的也可以看一下 优先队列
#include<bits/stdc++.h>
using namespace std;
int main()
{
priority_queue<pair<int,int >,vector<pair<int,int> >,greater<pair<int,int> > >heap;
heap.push(make_pair(9,10));
heap.push(make_pair(1,3));
heap.push(make_pair(1,1));
while(!heap.empty()){
cout<<heap.top().first<<" "<<heap.top().second<<endl;
heap.pop();
}
return 0;
}
4:map<string,vector<node> > 类型
#include<bits/stdc++.h>
using namespace std;
struct node
{
string s;
int flag;
node(string s1,int flag1):s(s1),flag(flag1){}
};
int main()
{
map<string,vector<node> >mp;
mp["chen"].push_back(node("001",1));
mp["chen"].push_back(node("002",2));
mp["cc"].push_back(node("004",3));
mp["cc"].push_back(node("003",4));
map<string,vector<node> >::iterator it;
for(it=mp.begin();it!=mp.end();++it){
string t=it->first;
vector<node>tt=it->second;
cout<<"第i个: "<<t<<endl;
for(int i=0;i<tt.size();i++){
cout<<tt[i].s<<" "<<tt[i].flag<<endl;
}
}
return 0;
}
注意这里不能用pair<string,vector<node> >和map<string,vector<node> >::value_type这种赋值
5:容器的遍历
#include<bits/stdc++.h>
using namespace std;
struct node
{
int a,b;
node(){}
node(int a1,int b1):a(a1),b(b1){}
};
int main()
{
vector<int>p(5,100);
for(auto it=p.begin();it!=p.end();++it){
cout<<*it<<endl;
}
for(auto it:p){
cout<<it<<endl;
}
vector<node>p1(5,node(1,2));
for(auto it:p1){
cout<<it.a<<" "<<it.b<<endl;
}
vector<int>p2(3,200);
for(const auto &it:p2){
}
return 0;
}
补充5
#include<bits/stdc++.h>
using namespace std;
int main()
{
vector<int>p[5];
for(int i=0;i<5;i++){
p[i].push_back(i);
}
p[1].push_back(10);
p[1].push_back(12);
//for(int i=0;i<v[1].size();i++)
for(auto &it:p[1]) cout<<it<<endl;
return 0;
}
七: 关于pair的排序
#include<iostream>
#include<string>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<vector>
#include<utility>
using namespace std;
int main()
{
pair<int, int>p[3];
p[0].first = 10;
p[0].second = 12;
p[1].first = 8;
p[1].second = 12;
p[2].first = 8;
p[2].second = 10;
sort(p, p + 3);
for (int i = 0;i < 3;i++) {
cout << p[i].first << " " << p[i].second << endl;
}
return 0;
}
可以看出是我们想要的排序
八:set map等的灵活应用
#include<bits/stdc++.h>
using namespace std;
struct node
{
int x,y;
node(){}
node(int x1,int y1):x(x1),y(y1){}
bool friend operator <(const node &A,const node &B)
{
if(A.x==B.x) return A.y>B.y;
else return A.x<B.x;
}
};
int main()
{
set<node>st;
st.insert(node(3,10));
st.insert(node(5,11));
st.insert(node(5,30));
st.insert(node(4,111));
for(set<node>::iterator it=st.begin();it!=st.end();++it){
cout<<it->x<<" "<<it->y<<endl;
}
return 0;
}
九:对auto的总结
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<vector>
#include<string>
#include<cstdlib>
#include<ctime>
#include<map>
#include<set>
#include<list>
#include<string>
using namespace std;
int main()
{
vector<int>vec;
for(int i=0;i<3;i++) vec.push_back(i);
auto it=vec.begin();//根据右边的表达式自动推导出具体类型,也支持引用类型的变量
cout<<*it<<endl;
auto it1 = vec[1];
cout<<it1<<endl;
cout<<"********vector************"<<endl;
for(auto &it:vec) it+=2;//改变vec的值 记住不用const,一定要用& 要不然不会改变
for(const auto &it:vec){
cout<<it<<endl;
}
cout<<"*******set*********"<<endl;
set<int>se;
for(int i=0;i<3;i++){
se.insert(i+10);
}
for(const auto &it:se){
cout<<it<<endl;
}
cout<<"*********map*********"<<endl;
map<int,int>mp;
for(int i=0;i<3;i++){
mp[i]=i+100;
}
for(const auto it:mp){
cout<<it.first<<" "<<it.second<<endl;
}
cout<<"**********正常数组************"<<endl;
int arr[]={1,2,3,4,5};
for(auto &x:arr) x+=2;
for(const auto &x:arr) cout<<x<<endl;
}
十:vector的定义
#include<bits/stdc++.h>
using namespace std;
int main(void)
{
int n=3,m=4;
//定义了一维长度为n,二维长度为m
vector<vector<int> >a(n,vector<int>(m));
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cerr<<a[i][j]<<' ';
}
cerr<<'\n';
}
//前三个值都为{11,10} 后面俩个分为为{1,3},{2,3};
vector<pair<int,int> >cc(3,make_pair(11,10));
cc.emplace_back(1,3);
cc.emplace_back(2,3);
for(int i=0;i<(int)cc.size();i++){
cerr<<cc[i].first<<" "<<cc[i].second<<'\n';
}
//vector<pair<int,int> >
return 0;
}