map を char* で参照するには

解決


origi  2005-01-22 08:14:40  No: 56109

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

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

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


origi  2005-01-24 05:20:35  No: 56111

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


REE  2005-01-25 00:18:30  No: 56112

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

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

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


origi  2005-01-29 07:40:17  No: 56113

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加