天天看点

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