天天看點

STL相關

//vector的輸入輸出以及用sort實作快速排序
           
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<vector>
#define N 10000
using namespace std;
struct stu
{
    int u;
    int v;
};
int scmp(stu a,stu b)
{
    return a.u>b.u;
}//對結構體進行排序函數
int cmp(int a,int b)
{
    return a>b;
}//定義比較函數
int main()
{
    vector<int>aa;
    vector<stu>zz;
    int m;
    int n;
    //int z,k;
    cin>>m;
    while(m--)
    {
        stu rmp;
        cin>>n>>rmp.u>>rmp.v;
        aa.push_back(n);
        zz.push_back(rmp);//将資料壓入動态數組末尾
    }
    sort(aa.begin(),aa.end(),cmp);
    sort(zz.begin(),zz.end(),scmp);
    //std::sort(aa.begin(),aa.end(),cmp);此種排序方式也可實作
    /*
    當然此處是将資料由大到小,也可以不加cmp實作從小到大排序
    */
    int sum;
    for(std::vector<int>::iterator i=aa.begin();i<aa.end();i++)
    {
        cout<<*i<<' ';
    }
    cout<<endl;
    for(std::vector<stu>::iterator j=zz.begin();j<zz.end();j++)
    {
        cout<<j->u<<'\t'<<j->v<<endl;
    }
    //利用疊代器進行通路,此處的i與j均為指針
    return 0;
}
           

set

//二叉搜尋樹,自動排序去重
    set<int>s;
    s.insert(1);
    s.insert(3);
    s.insert(2);
    s.insert(3);
    set<int>::iterator ite;

    //ite為位置指針,傳回具體值需要加*
    ite=s.begin();
    cout<<s.size()<<endl;
    for(ite=s.begin();ite!=s.end();ite++)
    {
        printf("%d\n",*ite);
        //cout<<(*ite)<endl;合法操作
    }
           

map

//map為經過排序的二進制組集合
    //允許多對一,不能一對多
    map<int,string>m;
    m.insert(make_pair(1,"ONE"));
    m.insert(make_pair(2,"TWO"));
    m[3]="THREE";


    map<int,string>::iterator ite;
    ite=m.find(1);
    cout<<ite->second<<endl;
    cout<<m[2]<<endl;
    m.erase(3);//删除元素
    for(ite=m.begin();ite!=m.end();ite++)
    {
        cout<<ite->first<<' '<<ite->second<<endl;
    }
           

加一道map的題目作為執行個體https://vjudge.net/contest/216863#problem/D

題解:給出表達式分别代表不同的字元串代表不同的值,最後給出一個長式計算結果,因為考慮到字元串與數值的對應,是以要用map可以實作

首先,介紹一個可以将字元串轉成整形數字的小方法

string s = "-1234";
 int a = atoi(s.c_str());
           

題目AC代碼

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<cmath>
#include<map>
#include<stack>
#include<vector>
#include<queue>
#include<set>
using namespace std;
const int MAX_N=10010;
typedef long long ll;
typedef long long LL;
bool text(string s)//判斷是否為整數
{
    if(!(s[0]>='1'&&s[0]<='9'||s[0]=='-'))return false;
    if(s[0]=='-')
    {
        for(int i=1; i<s.size(); i++)
        {
            if(s[1]=='0') return false;
            if(s[i]<'0'||s[i]>'9')
            {
                return false;
            }
        }
    }
    else
    {
        for(int i=0; i<s.size(); i++)
        {
            if(s[i]<'0'||s[i]>'9')
            {
                return false;
            }
        }
    }
    return true;
}
int main()
{
    int t;//樣例數
    int n;//每組式子數
    map<string,int>m;
    string s;
    char zz;
    int res;
    int k;
    while(scanf("%d",&t)!=EOF)
    {
        while(t--)
        {
            res=0;
            scanf("%d",&n);
            for(int zzz=1; zzz<n; zzz++)
            {
                cin>>s;
                cin>>zz;
                cin>>k;
                m[s]=k;
            }
            cin>>s;
            if(text(s))
            {
                res=atoi(s.c_str());
            }
            else
            {
                res=m[s];
            }
            while(1)
            {
                cin>>zz;
                if(zz=='=')continue;
                if(zz=='?')
                {
                    break;
                }

                else if(zz=='+')//加
                {
                    cin>>s;
                    if(text(s))
                    {
                        res=res+atoi(s.c_str());
                    }
                    else
                    {
                        res=res+m[s];
                    }
                }
                else  //減
                {
                    cin>>s;
                    if(text(s))
                    {
                        res=res-atoi(s.c_str());
                    }
                    else
                    {
                        res=res-m[s];
                    }

                }
            }
            printf("%d\n",res);

        }

    }
    return 0;
}