std::multimapがいるわけ&ありがとうmultimap

やあみんな、元気に年明け仕事始めのスタートを切れたかな?今日はmultimapがどうしてこの世にあるのかというお話だよ。
おじさんもmapやmultimapといった方たちにはさんざお世話になってきた。ところが、ちょっとひっかかるところがなくもなかったんだね。それは何かというと、mapは絶対に必要だけど、multimapって別になくても余裕。って思ってたんだ。実に浅はかだったよ。。
そして今回ふとした気まぐれで、素直にmultimapにすればいいところを、

typedef map< string, vector< string > > AhoMap;
AhoMap entry_map;

などと、宣言して使ってしまった。つまり、同一のキーエントリを複数格納できるmultimapを使うのではなくて、ある一つのキーに対して、複数の値を覚えておけるような、vector< string >を対応させたというわけだ。
ところが、たちどころにその使いにくさを身をもって知る羽目になったのです。例えば、「エステ」というキーワードに、「たかのゆり」と、「スリムビューティハウス」という値を対応させたいとしよう。
一つ目の追加は

vector< string > vec;
{
  vec.push_back( "たかのゆり" );
}
entry_map.insert( make_pair("エステ", vec) );

と、これでよいよな。でも二つ目以降からは当然、

  AhoMap::iterator it = entry_map.find( "エステ" );
 it->secons.push_back( "スリムビューティハウス" );

となり、つまり一つ目のエントリを入れる場合と二つ目以降のエントリを入れる場合とで、コードがまるきり違ってきてしまうのである。なので困ったことに、AhoMapインスタンスに何かエントリを追加しようという時は、今から入れようとしているキーが既に存在するかどうかをいちいち確認して場合分けしなくてはならないのであった!んなもん使ってられるかっつーの!
しかもうっかり2回目のinsertしちゃったら内容上書きで前のエントリは消えちゃうし、いいことないです。
というわけで、だから、mapだけでなくて、multimapもあるんだね!multimapってありがたい!mapだけじゃなくてmultimapも絶対に必要だね!って、心から思った。
若いみんなはAhoMapみたいなmapを定義するなんてこと決してしないっておじさんは信じてるけどさ。