地圖::擦除()方法有兩個重載刪除單個項目:std :: map :: erase() - 哪個超載更快?
void erase (iterator position);
size_type erase (const key_type& x);
我需要檢查哪個版本很可能是更快 - 我的猜測是第一,因爲第二個可能有調用map :: find()來查找迭代器?
任何人都可以確認嗎?
謝謝!
地圖::擦除()方法有兩個重載刪除單個項目:std :: map :: erase() - 哪個超載更快?
void erase (iterator position);
size_type erase (const key_type& x);
我需要檢查哪個版本很可能是更快 - 我的猜測是第一,因爲第二個可能有調用map :: find()來查找迭代器?
任何人都可以確認嗎?
謝謝!
第一個是攤銷常數複雜度,第二個是對數。常數項不可能大到足以使第一個版本慢於第二個版本,但我想他們必須在非常小的地圖上彼此區分開來。
謝謝,很好的回答! – James
我會更進一步:除非你處理的是非常大的地圖,否則它們可能接近難以區分。 –
第二個不能比第一個(基於迭代器的版本)慢。基於值的擦除的對數複雜度來自映射中的一個find()(搜索元素)並添加一個用於刪除它的常量因子。所以,只要你有迭代器使用它來擦除,否則提供值來擦除()。 –
你有一個迭代器擦除?如果你有,使用它。 –
不要猜測,試試吧。 –