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; //参照できる。
}
char *で保持される文字列の比較は,通常strcmpを使いますよね。
mapは<で比較するので,
"a" < "a"となったりするのでしょう。
比較用の関数オブジェクトを提供してやれば,const char *でも可能だと思います。
#"a"の型はconst char [2]であり,char [2]ではないのでconst char *とすべき。
YuOさんありがとうございます。
つまり、char* からは参照できないということですか?
>つまり、char* からは参照できないということですか?
YuOさんは、このままでは出来ないが、直せば出来るといっています。
例:map <const char*, string, str_cmp> data; // str_cmpは適切な関数オブジェクト
YuOさんありがとうございます。
まだよくわかりませんが、あとは自力で頑張れそうです。
ありがとうございました。
ツイート | ![]() |