2016-12-12 8 views
0

Из того, что я понимаю и исправляю, если я ошибаюсь в отношении любого из следующих, контейнеры используются для хранения объектов. Карта представляет собой ассоциативный контейнер, он хранит объекты как «элементы».Доступ к функциям-членам объектов на карте в C++

Если да, то как я могу получить доступ к функциям-членам этих объектов (например, сеттеров и геттеров), например, как я это делаю, когда создаю объект без карты для установки параметров?

или поставить по-другому, как я могу сделать эквивалент:

someClass someObject; 
someObject.setSomething(InputVari); 

на карте?

ответ

0

Вам необходимо использовать [] operator.

myMap[myIndex].setVariable(aValue); 

Например, если вы хотите, чтобы создать карту класса Человек с характером для ключа, где люди имели первое имя, фамилия, и текущее местоположение, а также setCurrentLocation (станд :: строка aNewLocation), он будет выглядеть примерно так:

std::map<char, Person> myMap; 

Person myPersonOne("Phill", "Collins", "England"); 

myMap['A'] = myPersonOne; 

myMap['A'].setNewLocation("New York") 
+0

Вы можете уточнить бит «index» или пример того, как он будет выглядеть? –

+0

Я добавил пример, помогает ли это? – Foxhound

+0

Что такое "Автомобиль"? @Foxhound –

0

поправьте меня, если я ошибаюсь, на любой из следующих контейнеры используются для хранения объектов

Не обязательно. Бывают случаи, когда сохранение указателя на объект предпочтительнее, например, когда объекты большие, и, следовательно, копирование объекта дорого. Другое дело, когда объект является полиморфным, и вы хотите хранить в контейнере объекты разных производных классов. Сохранение указателя предотвращает object slicing.

Для доступа к элементам объекта:

class Foo{ int A; void bar(){} }; 

map<string, Foo*> myMap; 

auto it = myMap.find("keyToObject"); 

if(it != myMap.end()) { 
    it->A += 1; it->bar(); 
} 

Вы должны быть немного осторожным при использовании [] с std::map, учитывая тот факт, [] немного больше, чем в удобное для обозначения insert(). Результат myMap[k] эквивалентен результату (∗(myMap.insert(make_pair(k,V{})).first)).second, где V - отображаемый тип.