Я пытаюсь придумать способы доступа / извлечения объекта из контейнера (карты, вектора) в наиболее эффективном из возможных поместьев.
Итак, если у меня есть объект:
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];
}
Есть еще идеи, как я могу хранить и извлекать свои объекты из коллекции в быстром и эффективном поместье?