std::map でキーに文字列のポインタをもつ

キー、値とも文字列の場合、以下のようにやってもうまく動かない。
typedef map<LPCTSTR,LPCTSTR> MYSTRINGMAP;

これはキーの比較をポインタでやるため、文字列として同じであっても、ポインタが違えば違うものとみなしてしまうからだ。

std::stringで以下のようにやってもいいが重くなるのでやりたくない。
typedef map<string,string> MYSTRINGMAP;

そこで比較を文字列自体でやらせるには以下のように定義する。(2017/9/25 const追加)

operator()は左の方が大きければtrueを返さなければならない。

ただし値もポインタだと持ちまわりずらい場合は

でいいと思われる。

Leave a Reply

Your email address will not be published. Required fields are marked *

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)