本文を読み飛ばす

やっぱりC++は難しい

仕事で久しぶりに C++ 的な C++ を書いたけれど、やっぱり難しい言語だなと改めて思った。

レガシー C プログラムの拡張中、試験的に辞書構造が必要になったので std::mapstd::set を使ってチョロリと書いた。ただ、次のような構造を作ろうとしたのだけれど:

map<string, set<string>>

これに格納する実データでは、map の値となる文字列集合が複数のキー文字列と関連付いてある。 しかも文字列集合のサイズはかなり大きい。 すると上記では文字列集合が莫大な数コピーされてダメダメなので次のようにすればスッキリすると思う。

map<string, shared_ptr<set<string>>>

しかし std::shared_ptr が使えない古い処理系なので

map<string, const set<string>*>
vector<set<string>*>

という形にして、new した setvector で実体を管理しつつ、それらを指したポインタを map に入れてやる。こんなことをやって要件を満たした。やれやれだ。

自分は、set に入るオブジェクトはコピーコンストラクタで挿入時にコピーされることを知っている。 map に入る値も同様にコピーされることも知っている。 また set に入れるのは std::string ではない自作の std::basic_string 派生クラスなので、 set で扱えるようにそれ用の less-than オペレーターの定義が必要になることも知っている。 こういう細々としたことは、知らない人がコードを読んでも分かりにくい… というか分かるわけがないといつも思う。 こんな言語を使って書いたプログラムを、 プログラミングが好きでもない人達に引き継ぐのは大変なことだといつも思う。 今回は辞書構造をゼロから作るのは労力的に無駄だと思い、 久しぶりに C++ に手を出したのだけれど…。 他の人のことを考えると、やっぱりこの言語は使いたくないと改めて思った。