2014-12-07 90 views
0

我不得不每次都重新創建一個映射,而不是僅僅引用已創建的映射。C++映射和指針

這工作:

void render(Scene *scene) { 

    map<std::string, Node*> _map = scene->getNodes(); // I don't want recreate the map every time. It is slowing down the render function :(
    for(auto outer_iter = _map.begin(); outer_iter!= _map.end(); ++outer_iter) { 
     outer_iter->second->draw(*scene->getCamera()); 
    } 
} 

但這並不....

void render(Scene *scene) { 

    //map<std::string, Node*> _map = scene->getNodes(); 
    for(auto outer_iter = scene->getNodes().begin(); outer_iter!= scene->getNodes().end(); ++outer_iter) { 
     outer_iter->second->draw(*scene->getCamera()); 
    } 
} 

我不明白爲什麼會這樣真的。

我怎樣才能引用場景中的地圖而不是每次都重新創建它?

+0

什麼錯誤是這樣的表現呢? – Conduit 2014-12-07 22:08:28

+0

'map '這樣的設計需要更多的[託管指針](http://en.cppreference.com/w/cpp/memory)恕我直言。 – 2014-12-07 22:10:32

回答

2

返回地圖通過const引用和改變const map<std::string, Node*> &_map

class Scene{ 
    map<std::string, Node*> map; 
public: 
    const map<std::string, Node*>& getNodes() const{ 
     return map; 
    } 
} 

void render(Scene *scene) { 

    const map<std::string, Node*> &_map = scene->getNodes(); 
    for(auto outer_iter = _map.begin(); outer_iter!= _map.end(); ++outer_iter) { 
     outer_iter->second->draw(*scene->getCamera()); 
    } 
} 

這將避免各一份render通話,只是操作地圖N

+0

謝謝!它現在工作:) – 2014-12-07 22:28:38