2015-12-16 90 views
0

如果我有地圖std::map<std::string, Person>類型的地方Person是我定義的類,下面是我怎麼會在迭代it訪問PersonC++地圖與值是一個指針

it->second; 

但如果地圖類型爲std::map<std::string, Person*>,在這種情況下該元素將是指向Person的指針,而不是實際的Person。我將如何訪問Person?例如,這是正確的:

*it->second; 

或者是這樣的:

it->*second; 

謝謝!

+0

'*它 - >秒'。但你不應該這樣做。如果價值語義不適合你,那麼使用'unique_ptr '或'shared_ptr ',這取決於什麼樣的所有權被指示。 –

+0

他們爲什麼不應該這樣做? – PunDefeated

+0

嗯,我想我的代碼一直有問題,因爲按值傳遞會導致複雜的問題,所以我想如果我開始傳遞指向對象的指針並存儲這些指針,那麼我可以避免任何情況在其中複製會導致數據不正確。 – CreasyBear

回答

2

那麼你會大多數可能訪問it->second->name,例如。但*(it->second)是正確的(我認爲你不需要的(),不記得;檢查運算符優先級)

0
Person const & person = *it->second; 
std::cout << person.name << std::endl; 
std::cout << person.address << std::endl; 
//etc 

或者乾脆

std::cout << it->second->name << std::endl; 
std::cout << it->second->address << std::endl;