2014-11-08 13 views
0

我正在收緊一些渲染代碼,而不是將所有可渲染對象存儲在普通的ol矢量中,我決定使用優先級隊列(這樣透明度等事情可以自動按優先級正確排列) 。然而,我無法讓它與列表一起作爲基礎數據結構。我已經嘗試過使用函子和超載運算符<。它抱怨:優先級隊列與向量一起工作但不是列表

Error 8 error C2676: binary '-' : 'std::_List_iterator<std::_List_val<std::_List_simple_types<IRenderable *>>>' does not define this operator or a conversion to a type acceptable to the predefined operator c:\program files (x86)\microsoft visual studio 12.0\vc\include\algorithm 2425 1 ObjLoaded 
Error 4 error C2676: binary '-' : 'std::_List_unchecked_iterator<std::_List_val<std::_List_simple_types<IRenderable *>>>' does not define this operator or a conversion to a type acceptable to the predefined operator c:\program files (x86)\microsoft visual studio 12.0\vc\include\algorithm 2331 1 ObjLoaded 
Error 7 error C2784: 'unknown-type std::operator -(const std::_Revranit<_RanIt,_Base> &,const std::_Revranit<_RanIt2,_Base2> &)' : could not deduce template argument for 'const std::_Revranit<_RanIt,_Base> &' from 'std::_List_iterator<std::_List_val<std::_List_simple_types<IRenderable *>>>' c:\program files (x86)\microsoft visual studio 12.0\vc\include\algorithm 2425 1 ObjLoaded 
Error 3 error C2784: 'unknown-type std::operator -(const std::_Revranit<_RanIt,_Base> &,const std::_Revranit<_RanIt2,_Base2> &)' : could not deduce template argument for 'const std::_Revranit<_RanIt,_Base> &' from 'std::_List_unchecked_iterator<std::_List_val<std::_List_simple_types<IRenderable *>>>' c:\program files (x86)\microsoft visual studio 12.0\vc\include\algorithm 2331 1 ObjLoaded 
Error 6 error C2784: 'unknown-type std::operator -(const std::reverse_iterator<_RanIt> &,const std::reverse_iterator<_RanIt2> &)' : could not deduce template argument for 'const std::reverse_iterator<_RanIt> &' from 'std::_List_iterator<std::_List_val<std::_List_simple_types<IRenderable *>>>' c:\program files (x86)\microsoft visual studio 12.0\vc\include\algorithm 2425 1 ObjLoaded 
Error 2 error C2784: 'unknown-type std::operator -(const std::reverse_iterator<_RanIt> &,const std::reverse_iterator<_RanIt2> &)' : could not deduce template argument for 'const std::reverse_iterator<_RanIt> &' from 'std::_List_unchecked_iterator<std::_List_val<std::_List_simple_types<IRenderable *>>>' c:\program files (x86)\microsoft visual studio 12.0\vc\include\algorithm 2331 1 ObjLoaded 
Error 5 error C2784: 'unknown-type std::operator -(std::move_iterator<_RanIt> &,const std::move_iterator<_RanIt2> &)' : could not deduce template argument for 'std::move_iterator<_RanIt> &' from 'std::_List_iterator<std::_List_val<std::_List_simple_types<IRenderable *>>>' c:\program files (x86)\microsoft visual studio 12.0\vc\include\algorithm 2425 1 ObjLoaded 
Error 1 error C2784: 'unknown-type std::operator -(std::move_iterator<_RanIt> &,const std::move_iterator<_RanIt2> &)' : could not deduce template argument for 'std::move_iterator<_RanIt> &' from 'std::_List_unchecked_iterator<std::_List_val<std::_List_simple_types<IRenderable *>>>' c:\program files (x86)\microsoft visual studio 12.0\vc\include\algorithm 2331 1 ObjLoaded 

這是怎麼了聲明優先級隊列:

priority_queue<IRenderable*, list<IRenderable*>> m_renderlist; 

與重載<運營商。如果我做一個簡單的更改,一切都運行:

priority_queue<IRenderable*, vector<IRenderable*>> m_renderlist; 

任何想法爲什麼這裏可能會發生?爲了完整起見,這裏是我的過載和函子:

bool IRenderable::operator<(const IRenderable* comp) 
{ 
    if (this->GetPriority() < comp->GetPriority()) 
     return true; 
    return false; 
} 

//class IRenderableComp 
//{ 
//public: 
// bool operator()(const IRenderable* first, const IRenderable* second) 
// { 
//  if (first->GetPriority() < second->GetPriority()) 
//   return true; 
//  return false; 
// } 
//}; 

不是超級重要的,因爲我可以得到它與載體的工作,但這個小東西,我的錯誤,我想知道爲什麼。任何洞察力將不勝感激。感謝

回答

0

23.6.4/1隨機訪問迭代和支持操作front()push_back()pop_back()和任何序列容器可被用於實例化priority_queue

23.3.5.1/1list是支持雙向迭代器序列容器......

重點煤礦。

+0

哦,哇,我覺得啞巴。我甚至查看了我的「C++標準庫 - 教程和參考」副本,顯然完全忽略了這一點。謝謝 – user3355098 2014-11-08 03:39:34