2008-09-24 103 views
10

地圖很容易完成任務,但它們都是內存耗盡,並且存在緩存問題。當你在一個可能很糟糕的關鍵循環中有一張地圖時。任何人都可以推薦一個C++ std :: map替換容器嗎?

所以我想知道是否有人可以推薦另一個具有相同API的容器,但使用可以說是矢量或哈希實現而不是樹實現。我的目標是交換容器,而不必重寫所有依賴地圖的用戶代碼。

更新:性能明智的最佳解決方案將是對一個std一個測試圖門面::矢量

回答

4

參見Loki::AssocVector和/或的hash_map(最STL實現具有這一個)。

+0

這基本上是一個有類似地圖的界面的排序std :: vector >。該許可證足夠寬容,可以將其撕掉並粘貼到您的項目的某個地方。 – 2008-09-24 14:15:21

+0

對不起,我到現在還沒回來檢查答案,但這正是我需要的!感謝一個完美的插件(考慮我的使用案例) – 2008-10-17 01:28:07

2

如果您的鑰匙是一種可以非常快速比較的簡單類型,並且您只有幾千個條目,那麼只需將您的鑰匙對放入std::vector並重複查找您的價值即可獲得更好的性能。

+0

理想情況下,這將是最好的解決方案,但我不想寫(和調試)矢量的接口/包裝是Map兼容的。你知道這種技術的實施嗎? – 2008-09-24 08:06:44

11

您可以使用std :: tr1 :: unordered_map,它已經存在於大多數STL實現中,並且是C++ 0x標準的一部分。

這裏是它的當前簽名:

template <class Key, 
      class T, 
      class Hash = std::tr1::hash<Key>, 
      class Pred = std::equal_to<Key>, 
      class Alloc = std::allocator<std::pair<const Key, T> > > 
class unordered_map; 
相關問題