キー、値とも文字列の場合、以下のようにやってもうまく動かない。
typedef map<LPCTSTR,LPCTSTR> MYSTRINGMAP;
これはキーの比較をポインタでやるため、文字列として同じであっても、ポインタが違えば違うものとみなしてしまうからだ。
std::stringで以下のようにやってもいいが重くなるのでやりたくない。
typedef map<string,string> MYSTRINGMAP;
そこで比較を文字列自体でやらせるには以下のように定義する。(2017/9/25 const追加)
1 2 3 4 5 6 7 8 |
struct stringcomparer { bool operator()(LPCTSTR x, LPCTSTR y) const { return _tcscmp(x,y)>0; } }; typedef std::map<LPCTSTR,LPCTSTR,stringcomparer> MYSTRINGMAP; |
operator()は左の方が大きければtrueを返さなければならない。
ただし値もポインタだと持ちまわりずらい場合は
1 |
typedef std::map<LPCTSTR,string,stringcomparer> MYSTRINGMAP; |
でいいと思われる。