我对 std::map 性能有疑问。在我的 C++ 项目中,我有一个GUIObject
s 列表,其中还包括Window
s。for
我在循环中绘制所有内容,如下所示:
unsigned int guiObjectListSize = m_guiObjectList.size();
for(unsigned int i = 0; i < guiObjectListSize; i++)
{
GUIObject* obj = m_guiObjectList[i];
if(obj->getParentId() < 0)
obj->draw();
}
在这种情况下,当我运行一个项目时,它可以顺利运行。我有 4 个窗口和一些其他组件,如按钮等。
但是我想单独处理绘制窗口,所以修改后,我的代码如下所示:
// Draw all objects except windows
unsigned int guiObjectListSize = m_guiObjectList.size();
for(unsigned int i = 0; i < guiObjectListSize; i++)
{
GUIObject* obj = m_guiObjectList[i];
if((obj->getParentId() < 0) && (dynamic_cast<Window*>(obj) == nullptr))
obj->draw(); // GUIManager should only draw objects which don't have parents specified
// And those that aren't instances of Window class
// Rest objects will be drawn by their parents
// But only if that parent is able to draw children (i.e. Window or Layout)
}
// Now draw windows
for(int i = 1; i <= m_windowList.size(); i++)
{
m_windowList[i]->draw(); // m_windowList is a map!
}
所以我创建了一个std::map<int, Window*>
,因为我需要在地图中将 s 的 z-indexesWindow
设置为key
s。但问题是当我运行这段代码时,它真的很慢。尽管我只有 4 个窗口(地图大小为 4),但我可以看到 fps 速率非常低。我不能说一个确切的数字,因为我还没有实现这样的计数器。
谁能告诉我为什么这种方法这么慢?