するクラスです.問題は second 関数で実際に値を変えるのですが,関数自体を const で定義しているので
ポインタから p->second = 100; という様な操作ができません.リファレンスをみてもアドレスを渡して
該当するキーの値を変えるという関数がありませんでした.
新しく関数を作ることなく(出来ればですが・・・・^^;)該当するキーの値を変更したいのですが
可能でしょうか?
#include<iostream> #include<string> #include<map> class Map_Class { private: std::string s; public: void second(std::map<std::string, int>&) const; const std::string& string_first() const {return s;} Map_Class(std::string ms) : s(ms) {} }; void Map_Class::second(std::map<std::string, int>& m) const { std::map<std::string, int>::const_iterator it; if ((it=m.find(string_first()))!=m.end()) { //second の値を変えたい. } } int main(void) { std::map<std::string, int> maps; std::string ss = "bb"; Map_Class mc(ss); std::map<std::string, int>::iterator it = maps.begin(); maps.insert(std::map<std::string, int>::value_type("aa", 10)); maps.insert(std::map<std::string, int>::value_type("bb", 20)); maps.insert(std::map<std::string, int>::value_type("cc", 30)); //maps.insert(std::map<std::string, int>::value_type("aa", 30)); //ここで第一引数を"aa"とすると //aa:10 //bb:20 //と表示された. // 変化前 while(it != maps.end()) { std::cout << (*it).first << ":" << (*it).second << std::endl; ++it; } mc.second(maps); // 変化後 while(it != maps.end()) { std::cout << (*it).first << ":" << (*it).second << std::endl; ++it; } return 0; }あと,付け足しなのですが insert 関数を使ってる3行目をコメントアウトしているようにしたら "aa" の値は
変わることなく2つしか表示されませんでした.これはどういう仕様なのでしょうか?