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 も、実行してみてから戻り値でチェックした方が効率的だった。
これを知った後のプログラムの修正が大変。