我的問題很簡單 - 有unordered_map<int, int>
我需要以最小的開銷跟蹤maximum key
。不是在任何時候,而是在某些「檢查站」。以下更多細節。帶「最大和最小鍵」跟蹤的unordered_map?
在我的交易應用程序中,我想用unordered_map
來存儲OrderBook項目。它應該映射int
到int
其中關鍵是價格和價值是音量。 (實際價格是十進制但我在內部使用int64)
我打算使用兩個unordered_map
- 一個用於bid
訂單和一個用於offer
訂單。
我需要知道Bid
- 一張地圖的最大關鍵字和另一張地圖的最小關鍵字Offer
。通常我在一個包中有「幾個」更新 - 我只需要在處理所有更新時重新計算出價和出價。例如,假設我有這樣手持訂單
100 1
102 1
104 1
Bid (max of key) is 104.
現在我有兩個更新:
remove key 104
add 103 1
end of transaction
執行應該如下:
1:
100 1
102 1
Bid undefined (transaction in progress)
2:
100 1
102 1
103 1
Bid = 103
我該怎麼做最小延遲?延遲是最基本的要求,如果忽略延遲我可以做很多事情:
- 非常容易:只要掃描所有按鍵,並找到最好的買入/賣出價,如果前一個已被刪除
- 我甚至可以用有序映射
所以看來我需要一些簡單的算法來跟蹤某些設置的最大/最小值,而無需每次重新計算它?
不考慮這一點,如何簡單地擁有第二個變量,始終保持最大值和最小值?然後,在插入unordered_map <>之前,首先更新最小/最大變量。現在你總是知道每個地圖的最大/最小鍵。 - 編輯 刪除當前最大的項目時,這可能會造成困難,嗯。 – bastijn
@bastijn這是「最難」的部分 – javapowered
你能詳細說明你的意思是什麼意思嗎?你的意思是[時間複雜度](http://en.wikipedia.org/wiki/Time_complexity)? – Dukeling