#include <iostream>
#include <cstdlib>
#include <string>
#include <map>
using namespace std;
class codeMonkey;
class produceDog;
class produceDog
{
public:
void add_todelist(codeMonkey&,int);
void reduce_todelist(codeMonkey& , int);
};
class codeMonkey
{
public:
void set(string ,int );
int sizeof_todelist();
string getname();
friend void produceDog::add_todelist(codeMonkey&,int);
friend void produceDog::reduce_todelist(codeMonkey& , int);
private:
string name;
int todelist;
};
void codeMonkey::set(string n,int to)
{
name=n;
todelist=to;
}
void produceDog::add_todelist(codeMonkey& cm,int tode)
{
cm.todelist+=tode;
}
void produceDog::reduce_todelist(codeMonkey& cm,int tode)
{
cm.todelist-=tode;
}
int codeMonkey::sizeof_todelist()
{
return todelist;
}
string codeMonkey::getname()
{
return name;
}
int comp(const void *a,const void *b)
{
return (((codeMonkey*)a)->getname() >= ((codeMonkey*)b)->getname())? 1: -1;
}
int find(string name,codeMonkey *code[],int a,int b) //二分法查找
{
if(a<=b)
{
int k=(a+b)/2;
if(name==code[k]->getname())return (a+b)/2;
else if(name<code[k]->getname()) k=find(name,code,a,k-1);
else k=find(name,code,k+1,b);
return k;
}
else return 10000;
}
int main()
{
int n,m,select;
string name;
int todelist;
produceDog producedog;
cin>>n;
codeMonkey *codemonkey=new codeMonkey[n];
codeMonkey *codem[10000]; // 指標陣列,間接排序指標陣列
for(int i=0;i<n;i++)
{
cin>>name>>todelist;
codemonkey[i].set(name,todelist);
codem[i]=&codemonkey[i];
}
qsort(codem,n,sizeof(codeMonkey *),comp);
for(int i=0;i<n;i++) //輸出排序結果,沒有成功。
cout<<codem[i]->getname()<<endl;
int x;
cin>>m;
for(int i=0;i<m;i++)
{
cin>>name>>select;
int y=find(name,codem,0,n);
cin>>x;
switch(select)
{
case 0: producedog.add_todelist(codemonkey[y],x);break;
case 1: producedog.reduce_todelist(codemonkey[y],x);break;
}
}
for(int i=0;i<n;i++)
{
cout<<codemonkey[i].getname()<<" "<<codemonkey[i].sizeof_todelist()<<endl;
}
return 0;
}
快排加二分法查找,但是快排物件陣列不成功!就指教!
uj5u.com熱心網友回復:
弄一個比較簡單的指標陣列,比如指向int的指標陣列,這樣comp函式比較簡明,然后看看問題出在comp環節還是qsort環節轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/121007.html
標籤:基礎類
上一篇:更版主道歉
