• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C++ 文字列とポインタ、STL::mapについて)

C++ 文字列とポインタ、STL::mapについて

このQ&Aのポイント
  • C++でポインタと文字列の受け渡しについて質問です。
  • MyData::search()は文字列を受け取ってメンバ変数dict内のヒットしたデータのグループ(文字列)を返すメンバ関数です。
  • メンバ変数dictはSTLのmapを使っています。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

僕ならこうする。 #include <iostream> #include <map> #include <string> class MyData { std::map<std::string,std::string> dict; public: void add(const std::string& key, const std::string& value) { dict[key] = value; } bool search(const std::string& key, std::string& value) const { std::map<std::string,std::string>::const_iterator iter = dict.find(key); if ( iter == dict.end() ) { return false; } value = iter->second; return true; } }; using namespace std; int main() { MyData data; data.add("apple","りんご"); data.add("orange", "みかん"); string value; string key; key = "apple"; cout << key << ':' << (data.search(key,value) ? value : "not found") << endl; key = "peach"; cout << key << ':' << (data.search(key,value) ? value : "not found") << endl; }

wasaox
質問者

お礼

ありがとうございます。参照をよく理解してませんでした。 自分がやりたかったのはこのような事です。 この場合、searchで得られたvalueは書き換え不可能ということで合ってますでしょうか?

その他の回答 (2)

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.2

C++ってコトだと…… >void MyData::search( const char* funcbox, const char* result ){ resultは参照だったりしませんか? void MyData::search( const char* funcbox, const char* &result ){ とか。

wasaox
質問者

お礼

ありがとうございます。 void MyData::search( const char* funcbox, const char* &result ) こちらの方法でも大丈夫でした。 char* &result というのははじめて見た形なのですが、よく使われるのでしょうか?

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.1

>上のようにアクセスするとメンバ関数内では res == "groupA" となりますが、 >関数から出るとresはNULLになってしまいます。 MyData::search()のresultが指しているのはいったいどこのアドレスなんでしょう? >MyData::search("yamada", res); という書き方で「直前で書かれているローカル変数resの『アドレス』」を渡せるでしょうか? ローカル変数resの『中身』を渡しているのではありませんか? # で、NULLを渡していて… # result = a_group; # って通るんでしょうか????

関連するQ&A

専門家に質問してみよう