📄 parts.h
字号:
// parts.h
#ifndef _PARTS_H_
#define _PARTS_H_
#include <vector>
#include <map>
#include <string>
using namespace std;
//**************** Part ****************
class Part {
public:
string name;
// TODO: Finish declaration
map<Part*,int> subparts;
Part(string const &n) : name(n) {};
void describe(void);
int count_howmany(Part const *p);
};
//**************** NameContainer ****************
class NameContainer {
private:
map<string,Part*> name_map;
public:
NameContainer(void) {};
Part* lookup(string const &name) {
// TODO: Finish implementation
map<string,Part*>::iterator it=name_map.find(name);
if(it==name_map.end())
{
Part *apart=new Part(name);
name_map.insert(map<string,Part*>::value_type(name,apart));
return apart;
}
else
return it->second;
}
};
NameContainer partContainer;
//**************** Part Member Functions ****************
void Part::describe(void) {
map<Part*,int>::iterator it;
if(subparts.size()!=0)
{
cout<<"Part "<<name<<" subparts are "<<endl;
for(it=subparts.begin();it!=subparts.end();++it)
{
cout<<it->second<<" "<<it->first->name<<endl;
}
}else
cout<<" It has no subparts."<<endl;
// TODO: Finish implementation
}
int Part::count_howmany(Part const *p) {
// TODO: Finish implementation
int count=1;
int sum=0;
map<Part*,int> subpart=this->subparts;
if(this->name==p->name)
return 1;
for(map<Part*,int>::iterator it=subpart.begin();it!=subpart.end();it++)
{
int cot;
if(it->first->name==p->name)
return it->second;
else
{
if(it->first->subparts.size()==0&&it->first->name!=p->name)
cot=0;
else if(it->first->subparts.size()!=0)
cot=it->second*it->first->count_howmany(p);
sum+=cot;
}
}
return sum;
}
//**************** Miscellaneous Functions ****************
void add_part(string const &x, int q, string const &y) {
// TODO: Finish implementation
Part *a=partContainer.lookup(x);
Part *b=partContainer.lookup(y);
a->subparts.insert(map<Part*,int>::value_type(b,q));
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -