C++ 列表<;myClass<;int>;*&燃气轮机;分类

C++ 列表<;myClass<;int>;*&燃气轮机;分类,c++,list,sorting,pointers,C++,List,Sorting,Pointers,我无法对包含指向模板类对象的指针的列表进行排序。 模板 类节点{ 公众: 节点(空){} 节点(T选择、向量和数据); 节点(T选项、向量和数据、玩家p、整数级别、整数位置、节点*pred、哪边); void addNodes(void); 静态列表节点; 朋友类MyBinomialTree; 布尔分类器(常量节点*lhs,常量节点*rhs);//as*&lhs也不工作 私人: 节点*左; 节点*右; T选择!; 矢量数据; 布尔岛; //... }; 课外活动: template<cl

我无法对包含指向模板类对象的指针的列表进行排序。 模板

类节点{
公众:
节点(空){}
节点(T选择、向量和数据);
节点(T选项、向量和数据、玩家p、整数级别、整数位置、节点*pred、哪边);
void addNodes(void);
静态列表节点;
朋友类MyBinomialTree;
布尔分类器(常量节点*lhs,常量节点*rhs);//as*&lhs也不工作
私人:
节点*左;
节点*右;
T选择!;
矢量数据;
布尔岛;
//...
};
课外活动:

template<class T>
bool Node<T>::sorter(const Node<T> * lhs, const Node<T> * rhs){
    if((*lhs).level_==(*rhs).level_){
        return (*lhs).pos_<(*rhs).pos_;
    }else{
        return (*lhs).level_<(*rhs).level_;
    }

}
模板
布尔节点::分拣机(常数节点*lhs,常数节点*rhs){
如果((*lhs).level_==(*rhs.level){

return(*lhs)。pos_p>
std::sort
需要随机访问迭代器,因此不能与
std::list
迭代器一起使用

请务必仔细阅读模板函数的文档。模板错误可能是一场噩梦

编辑:
正如Christian提到的,
std::list
有自己的排序方法。您可以只做以下两个更改:

bool分拣机(常量节点*lhs,常量节点*rhs);
静态布尔分拣机(常数节点*lhs,常数节点*rhs);

std::sort(Node::Nodes.begin(),Node::Nodes.end(),&Node::sorter);

Nodes.sort(&Node::sorter);

尝试将
bool-sorter
声明为类的静态函数。下面是我的(至少是临时的,因为它不是模板)解决方案:bool-sorter(const-Node*lhs,const-Node*rhs){if((*lhs)。level_==(*rhs)。level_){return(*lhs).pos\ucode>std::list
有一个内置的排序函数,也是一个以函子为参数的函数,也许这对你有用。这个答案刚刚修复了我正在处理的模板错误,谢谢你结束了我的噩梦!
template<class T>
bool Node<T>::sorter(const Node<T> * lhs, const Node<T> * rhs){
    if((*lhs).level_==(*rhs).level_){
        return (*lhs).pos_<(*rhs).pos_;
    }else{
        return (*lhs).level_<(*rhs).level_;
    }

}
template<class T>
void Node<T>::print(void){

    std::sort(Node<T>::Nodes.begin(),Node<T>::Nodes.end(),&Node<T>::sorter);
    cout<<endl<<"after sort:"<<endl;

    list<Node<T> * >::iterator it=Node<T>::Nodes.begin();cout<<endl;
    while(it!=Node<T>::Nodes.end()){
    //...
    }
} 
c:\program files\microsoft visual studio 10.0\vc\include\algorithm(3806): error C2784: 'std::complex<_Other> std::operator -(const _Ty &,const std::complex<_Other> &)' : could not deduce template argument for 'const std::complex<_Other> &' from 'std::_List_iterator<_Mylist>'
          with
          [
              _Mylist=std::_List_val<Node<int> *,std::allocator<Node<int> *>>
          ]
          c:\program files\microsoft visual studio 10.0\vc\include\xcomplex(52) : see declaration of 'std::operator -'
          c:\documents and settings\cf16r\moje dokumenty\visual studio 2010\projects\binomial_tree\binomial_tree\mybinomialtree.h(136) : see reference to function template instantiation 'void std::sort<std::_List_iterator<_Mylist>,bool(__thiscall Node<T>::* )(const Node<T> *,const Node<T> *)>(_RanIt,_RanIt,_Pr)' being compiled
          with
          [
              _Mylist=std::_List_val<Node<int> *,std::allocator<Node<int> *>>,
              T=int,
              _RanIt=std::_List_iterator<std::_List_val<Node<int> *,std::allocator<Node<int> *>>>,
              _Pr=bool (__thiscall Node<int>::* )(const Node<int> *,const Node<int> *)
          ]