我正在處理一些程序,現在正在處理一些指數時間算法。正因爲如此,我的程序的一個主循環正在運行很多次,我試圖儘可能地優化它。STL結構:「插入如果不存在」操作?
分析顯示大部分時間用於std::unordered_map
的查找和散列計算。
我想知道:
是否有緩存
std::unordered_map
一個關鍵的哈希值,然後將它作爲參數傳遞給插入以後的方法嗎?有沒有一種方法,我可以做下面的一個操作:給定一個鍵和值
{x,y}
,檢查關鍵x
在地圖上,如果不是,將其插入並返回{x,y}
,否則返回{x,z}
對於任何z
已經在地圖中。
我正在做這樣的事情,但效率不高,因爲我必須計算密鑰的哈希值並檢查它是否在地圖中。但是如果它不在地圖中,我會做一個完全獨立的插入操作。理論上,檢查它是否存在於地圖中,如果插入它應該找到它將在地圖中的位置。
我願意嘗試其他數據結構,如std::map
或Boost的其他數據結構,如果它們會減少此操作的時間。
改爲使用線程。或者你可以使用OpenMP並行化你的循環 –
什麼是關鍵類型? – SergeyA
你甚至可能想要一個'std :: vector',因爲它非常緩存和預取友好。請參閱:http://baptiste-wicht.com/posts/2012/11/cpp-benchmark-vector-vs-list.html – NathanOliver