map を char* で参照するには

解決


origi  2005-01-22 08:14:40  No: 56109  IP: [192.*.*.*]

origiです。
なぜかできないので教えてください。
WindowsXp の VisualC++.net です。

char* で map を参照すると、データは参照できないのに、
string で参照するとなぜかできます。
この原因ってなんですか?ご教授お願いします。

main()
{
  map<char*, string> data;
  map<string, string> data2;
  char str[10];
  string st;

  data["a"] = "test";
  strcpy(str, "a");
  st = "a";
  cout << data["a"] << endl;
  cout << data[str] << endl; // 参照できない。
  cout << data2[st] << endl; //参照できる。
}

編集    削除
YuO  2005-01-22 08:27:07  No: 56110  IP: [192.*.*.*]

char *で保持される文字列の比較は,通常strcmpを使いますよね。
mapは<で比較するので,
"a" < "a"となったりするのでしょう。

比較用の関数オブジェクトを提供してやれば,const char *でも可能だと思います。
#"a"の型はconst char [2]であり,char [2]ではないのでconst char *とすべき。

編集    削除
origi  2005-01-24 05:20:35  No: 56111  IP: [192.*.*.*]

YuOさんありがとうございます。
つまり、char* からは参照できないということですか?

編集    削除
REE  2005-01-25 00:18:30  No: 56112  IP: [192.*.*.*]

>つまり、char* からは参照できないということですか?

YuOさんは、このままでは出来ないが、直せば出来るといっています。

例:map <const char*, string, str_cmp> data;  // str_cmpは適切な関数オブジェクト

編集    削除
origi  2005-01-29 07:40:17  No: 56113  IP: [192.*.*.*]

YuOさんありがとうございます。
まだよくわかりませんが、あとは自力で頑張れそうです。
ありがとうございました。

編集    削除