2015-06-05 55 views
0

當我保存一個字符串對象轉換成一個std ::地圖地圖中的字符串如何存儲?

std::map<std::string, SomeOtherData> map; 

如何字符串將被存儲在哪裏?我瞭解到std :: map經常以紅黑樹的形式實現,但是如何將字符串存儲在那裏呢?作爲trie?

+4

與許多其他的事情:取決於你的STL的實現 – BeyelerStudios

回答

1

如果你的意思是每個節點有一個字符的實現 - 答案是否定的,那麼每個節點都存儲std :: string,因此如果你打算使用std :: strings作爲鍵,你可以看看Ternary Trie (據我記憶,由Sedgewick提議)

+0

做'std string per node'是指指針還是整個對象?他們是按字典順序排列的嗎? – Albert

0

你可以弄明白這一點。 *map.begin()爲您提供參考到第一個鍵值對。只要密鑰存在,該引用就不會失效,這意味着密鑰對象必須存在於內存中。特別是,這意味着你不能有一個(純的)特里實現,因爲特里沒有顯式地存儲關鍵對象。相反,一個trie存儲前綴。

(從理論上說,你可以有一個線索,仍然重複鍵存儲在每個節點這就是我所說的不純的線索。)

+0

謝謝,這可能意味着按鍵(即字符串對象)通過按字母順序比較它們的內部字符「走過」,對吧? – Albert

+0

使用存儲在地圖中的比較對象比較字符串。默認情況下,這是'std :: less ',但你可以有其他人。 – MSalters