2012-08-22 28 views
3

地圖::擦除()方法有兩個重載刪除單個項目:std :: map :: erase() - 哪個超載更快?

void erase (iterator position); 
size_type erase (const key_type& x); 

我需要檢查哪個版本很可能是更快 - 我的猜測是第一,因爲第二個可能有調用map :: find()來查找迭代器?

任何人都可以確認嗎?

謝謝!

+8

你有一個迭代器擦除?如果你有,使用它。 –

+2

不要猜測,試試吧。 –

回答

12

第一個是攤銷常數複雜度,第二個是對數。常數項不可能大到足以使第一個版本慢於第二個版本,但我想他們必須在非常小的地圖上彼此區分開來。

+0

謝謝,很好的回答! – James

+0

我會更進一步:除非你處理的是非常大的地圖,否則它們可能接近難以區分。 –

+0

第二個不能比第一個(基於迭代器的版本)慢。基於值的擦除的對數複雜度來自映射中的一個find()(搜索元素)並添加一個用於刪除它的常量因子。所以,只要你有迭代器使用它來擦除,否則提供值來擦除()。 –