顺序容器的使用细节

 

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;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值