2014-09-29 3 views
-1

Я хочу сохранить объект, которому дано определенное имя.Структура данных, которая хранит объект с именами

Я хотел использовать struct, а затем хранить их в vector, но мне было предложено, чтобы я использовал другую структуру данных, немного более простую, но я не могу найти ее.

Мой текущий ("комплекс") Решение:

//in header file 
struct objStorage{ 
    Classname obj; 
    string name; 
}; 
vector<objStorage> vec; 

//in constructor 
objStorage firstObj; 
firstObj.obj = new Classname(); 
firstObj.name = "foo"; 
vec.push_back(firstObj); 

Есть более простое решение (структура данных)?

Я должен добавить, что мне не нужна структура после того, как я сохранил (скопировал?) Ее в векторе, потому что все это происходит в другом классе (конструкторе), поэтому я не хочу никаких проблем при вызове конструктора много раз.

+1

Как вы хотите это использовать? Посмотрите вещи по имени? Перечислите их в порядке имени? Также вы устанавливаете 'obj'' new Classname' и '' foo '' - поэтому это не будет компилироваться. И кто удаляет 'new Classname()'? – doctorlove

+0

Мне нужно посмотреть их по имени позже, да. Я имел в виду firstobject, я отредактирую это. Деструктор заботится о удалении имени класса – TheGuyWithStreetCred

+2

Почему бы вам не пойти на хэш-карту? Это не риторический вопрос, я хочу знать, есть ли какое-то специальное требование, из-за которого вы не можете его использовать. –

ответ

3

Если вы хотите для поиска элементов с помощью какого-то ключа, например, строка, классическая вещь, чтобы использовать это map:

std::map<std::string, Classname> items; 
std::pair<std::map<std::string, Classname>::iterator, bool> inserted = 
    items.insert(std::make_pair(std::string("foo"), Classname())); 
items["bar"] = Classname(); 

В этом установить, если вы действительно думаете, что вы хотите использовать указатели, вы должны рассмотреть некоторую форму умного указателя.

Есть и другие варианты, например, C++ 11 представляет другие структуры поиска - например. неупорядоченные карты.

+0

Это именно то, что мне нужно, я родом из java, но полностью забыл о картах – TheGuyWithStreetCred

Смежные вопросы