std::map を使用していると、 「ある条件を満たし(た|てない)要素を削除したい」 ってことがよくある。 そんな時はこんな感じにしてみる。 std::map<int, bool> hige; std::map<int, bool>::iterator it = hige.begin(); while (it != hige.end()) { if (it->second == true) { // ここがポイント hige.erase(it++); } else { ++it; } } [説明] std::map は要素を変更した場合に、以前まで保持していた iterator は無効になってしまう。 erase の戻り値も void なので何も期待できない。 だったら erase に渡す前の iterator を保持しちゃう。 std::map<int, bool>::iterato