2016-01-18 13 views
2

C++標準是否實際上要求std::unordered_map的一致性實現將每個鍵和值放在內存中?標準要求std :: unordered_map是否將鍵值對放在內存中?

我認爲答案是肯定的,因爲std::unordered_map的大部分是根據std::pair指定的,我不認爲隱藏內存中不相交的鍵值對的細節所需的操作可能完全隱藏,但我不確定。

+0

你真的想知道什麼?你可以迭代對,所以是的,它們確實存在。 –

回答

8

的標準要求value_typestd::map::iteratorstd::pair<const key, T>,所以(例如),當你走通過地圖迭代,每次提領迭代器,你會得到一個pair<const key, T>時間。

該標準還要求(例如)emplace將迭代器「返回到新插入的元素」。至少通過我的閱讀,這意味着你不能將鍵和值彼此分開存儲,而只是(例如)將鍵/值複製到臨時位置,以便它可以返回指向/指向按需定位。

後者會(例如)違反異常安全要求。爲了使集合中的元素可見,必須進行復制,在不允許的情況下,因爲這樣的複製可能會引發異常,但是不允許相關函數這樣做(實際上,可能會放置類型根本無法複製)。

2

要求映射迭代器指向std::pair<const Key, T>,並要求迭代器引用的對象不會隨着時間改變其地址,因此無法以其他方式實現。所述一對應該存在並且是持久的。

潛在地圖可以同時保存兩個鍵值對用於說明並保持按鍵的內部副本以供它們搜索,但是對於空間和性能來說效率不高。

相關問題