- ベストアンサー
C++ 文字列とポインタ、STL::mapについて
- C++でポインタと文字列の受け渡しについて質問です。
- MyData::search()は文字列を受け取ってメンバ変数dict内のヒットしたデータのグループ(文字列)を返すメンバ関数です。
- メンバ変数dictはSTLのmapを使っています。
- みんなの回答 (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; }
その他の回答 (2)
- Wr5
- ベストアンサー率53% (2173/4061)
C++ってコトだと…… >void MyData::search( const char* funcbox, const char* result ){ resultは参照だったりしませんか? void MyData::search( const char* funcbox, const char* &result ){ とか。
お礼
ありがとうございます。 void MyData::search( const char* funcbox, const char* &result ) こちらの方法でも大丈夫でした。 char* &result というのははじめて見た形なのですが、よく使われるのでしょうか?
- Wr5
- ベストアンサー率53% (2173/4061)
>上のようにアクセスするとメンバ関数内では res == "groupA" となりますが、 >関数から出るとresはNULLになってしまいます。 MyData::search()のresultが指しているのはいったいどこのアドレスなんでしょう? >MyData::search("yamada", res); という書き方で「直前で書かれているローカル変数resの『アドレス』」を渡せるでしょうか? ローカル変数resの『中身』を渡しているのではありませんか? # で、NULLを渡していて… # result = a_group; # って通るんでしょうか????
お礼
ありがとうございます。参照をよく理解してませんでした。 自分がやりたかったのはこのような事です。 この場合、searchで得られたvalueは書き換え不可能ということで合ってますでしょうか?