2017-05-30 38 views
-1

我有以下如何通過值而不是引用使unordered_map <string*, V>散列?

C++ code with unordered_map

兩個等價的字符串酒吧和bartest不映射到unordered_map相同的值。我怎樣才能做到這一點?

+4

使用'的std :: unordered_map <的std :: string,V>'。 –

+2

將來如果你在這裏粘貼代碼而不是提供快照會更好。 – Ray

+1

'std :: string',除了是一個字符串類,也是一個資源管理類。因此,不要通過將字符串對象本身作爲資源進行管理來添加多餘的開銷。使用價值語義,就像皮特貝克爾說的那樣。 – StoryTeller

回答

2

他們當然不映射到相同的值,const string*是指針類型,並且自你打電話new string兩次,則結束與不具有存儲器標識(指針不相等)兩個單獨的對象。

更糟糕的是,你在程序結束時會泄漏它們。

什麼(可以說)更糟,擁有原始指針和裸new調用在現代C++中被認爲是有害的。

幸運的是,它的所有修復都與unordered_map<string, int> - 無需任何指針。

0

您的C++實際上是「Java-- + C」。

刪除所有這些愚蠢的指針。

所有你需要的是unordered_map<string,int>和使用純值,而不是堆分配 「new的」

只是做

#include <unordered_map> 
#inclide <string> 
#include <iostream> 
int main() 
{ 
    unordered_map<string,int> mymap; 
    mymap["bar"] = 5; 
    mymap["bartest"] = 10; 

    std::cout << mymap["bar"] << ' ' << mymap["bartest"] << '\n'; 
    return 0; 
} 
相關問題