天天看點

高效的使用stl::map和std::set

<b>1、低效率的用法</b>

// 先查找是否存在,如果不存在,則插入

if (map.find(X) == map::end()) // 需要find一次

{

    map.insert(x); // 需要find一次

}

// 下面這段代碼是一個意思

if (0 == map.count(X) // 需要find一次

// 或者是先判斷是否存在,如果不存在則插入,反之如果存在則修改

if (map.count(X) &gt; 0) // 需要find一次

    map.erase(X); // 需要find一次

map.insert(x); // 需要find一次

// 對于erase存在同樣低效的用法

else

    // 不存在時的處理

<b>2、高效率的用法</b>

// 解決辦法,充分利用insert和erase的傳回值,将find次數降為1

map::size_type num_erased = map.erase(X); // 需要find一次

if (0 == num_erased)

    // 存在且删除後的處理

pair&lt;map::iterator, bool&gt; result_inserted;

result_inserted = map.insert(X);

if (result_inserted.second)

    // 不存在,插入成功後的處理

    // 已經存在,插入失敗後的處理

    result_inserted.first-&gt;second = X; // 修改為新值 

    本文轉自eyjian 51CTO部落格,原文連結:http://blog.51cto.com/mooon/909785,如需轉載請自行聯系原作者

繼續閱讀