⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parts.h

📁 卡内基梅隆大学SSD5数据结构的实验内容包括实验1-5的所有要提交的文件
💻 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 + -