修改地图中包含的类的正确方法是什么?

时间:2013-12-18 21:57:48

标签: c++ stl iterator

我有一张班级地图。如果我使用迭代器来遍历地图,我无法修改类的内容,因为它们需要是const。无论如何,一个人可以迭代一个地图(或使用迭代器的其他STL容器)并调用一个修改每个对象内容的函数?

例如:

    #include <iostream>
    #include <map>
    #include <string>

    using namespace std;


    class stuff
    {
        public:
            void setFoo(int foo);
            int getFoo();
        private:
            int aFoo;
    };

    void stuff::setFoo(int foo)
    {
        this->aFoo = foo;
    }

    int stuff::getFoo()
    {
        return this->aFoo;
    }

    int main()
    {
        stuff myStuff;
        stuff myOtherStuff;

        myStuff.setFoo(10);
        myOtherStuff.setFoo(20);

        map<int, stuff> myMap;

        myMap.insert(pair<int,stuff>(0, myStuff));
        myMap.insert(pair<int,stuff>(5, myOtherStuff));


        map<int, stuff>::const_iterator it = myMap.begin();

        while (it != myMap.end())
        {
            it->second.setFoo(it->second.getFoo() * 5); //Expect myStuff.aFoo = 50 and myOtherStuff.aFoo = 100
            cout << it->first << " " << it->second.getFoo() << endl;
            it++;
        }
    }

由于const限制,这不起作用。什么是让它按预期工作的正确方法?

谢谢!

1 个答案:

答案 0 :(得分:4)

只需使用map<int, stuff>::iterator代替map<int, stuff>::const_iterator