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