std::map - erase の戻り値を活用する

またまた std::map の記事です;
std::map で erase してみた。

std::map<int, char> hige;
hige.insert(std::make_pair(1, 'a'));
...
std::map<int, char>::iterator it = hige.find(1);
if (it == hige.end()) {
    // キーが重複している
} else {
    hige.erase(it);
}

「erase 時に find するのが面倒くさい!」
と思ったので STL の中身を調べてみたら、このようにできた。

std::map<int, char> hige;
hige.insert(std::make_pair(1, 'a'));
...
if (!hige.erase(1)) {
    // キーが重複している
}

実は、わざわざ find しなくてもキーを引数として削除できる。
キーを引数とした erase の定義は以下。

size_type erase(const key_type& _Keyval)

戻り値にはキーで find した際にヒットした数が入る(0 or 1 じゃないのは multimap 用かと)
std::map は insert も erase も、実行してみてから戻り値でチェックした方が効率的だった。
これを知った後のプログラムの修正が大変。