我想要拿出從最有效莊園中的容器(地圖,矢量,)訪問/檢索對象的技術。從指針集合中快速檢索特定對象
所以,如果我有對象:
class Person
{
public:
string name;
unsigned int ID; // unique ID
double deposit;
};
// And then I have a vector of pointers to person objects
std::vector <Person*> people;
Person* getPerson(string nName);
Person* getPerson(unsigned int nID); // what would be a good method to quickly identify/retrieve the correct Person object from my vector?
我的想法:
這是迭代的解決方案,它是沒有效率的:
Person* getPerson(string nName)
{
for (int i=0; i<people.size(); i++)
{
if (people[i]->name == nName) { return people[i]; }
}
}
另一種方式:有2個地圖
map <string, Person*> personNameMap;
Person* getPerson(string nName)
{
return personNameMap[nName];
}
map <string, Person*> personIDMap;
Person* getPerson(unsigned int nID)
{
char id[2];
atoi(nID, id, 10); // or is it itoa?
return personNameMap[id];
}
任何其他想法如何我可以存儲&從一個快速的&高效莊園收集我的對象?
好的,但我希望能夠通過他們的名字和他們的ID(號碼)來查找Person的名字,那麼你會怎麼做 - 創建2個容器,按名稱查找地圖,查找時創建矢量/數組由ID。或者你會使用模板化功能來做到這一點?我正在學習用於組織和從集合中檢索對象的技術。 – user593747 2011-05-05 11:09:40
保留兩個容器。一張地圖 nameToIdMap。和一個矢量。但是,id和索引應該匹配。當你想用它查找時,只需返回objVec [index]'(其中索引應該是id)'。在使用名稱作爲關鍵字從地圖名稱搜索索引的情況下,返回objVec [index]。但爲了高效工作,您需要知道向量的大小,以便在填充之前對其進行初始化。然後填寫像objVec [id] =「Person」這樣的矢量,並避免ppush_back。 –
Mayank
2011-05-05 11:17:23