map を char* で参照するには

解決


origi  2005-01-21 23: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-21 23:27:07  No: 56110  IP: [192.*.*.*]

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

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

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

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

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

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

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

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

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

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

編集 削除