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