するクラスです.問題は 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つしか表示されませんでした.これはどういう仕様なのでしょうか?