我在使用排序算法和对象列表时遇到问题。这是我的代码
Error 4 error C2676: binary '-' : 'std::_List_iterator<std::_List_val<std::_List_simple_types<Project>>>' 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 3157
Error 5 error C2780: 'void std::_Sort(_RanIt,_RanIt,_Diff,_Pr)' : expects 4 arguments - 3 provided c:\program files (x86)\microsoft visual studio 12.0\vc\include\algorithm 3157
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_iterator<std::_List_val<std::_List_simple_types<Project>>>' c:\program files (x86)\microsoft visual studio 12.0\vc\include\algorithm 3157
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_iterator<std::_List_val<std::_List_simple_types<Project>>>' c:\program files (x86)\microsoft visual studio 12.0\vc\include\algorithm 3157
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_iterator<std::_List_val<std::_List_simple_types<Project>>>' c:\program files (x86)\microsoft visual studio 12.0\vc\include\algorithm 3157
这些是错误
nav
答案 0 :(得分:1)
问题是std::sort
需要随机访问迭代器,但std::list
不提供它们;它只支持双向迭代器。这就是std::list
拥有sort
成员函数的原因。因此,不要拨打std::sort(l1.begin(), l1.end(), sortByAge)
来电l1.sort(sortByAge)
。
答案 1 :(得分:1)
std::sort
接受RandomAccessIterator
s
template< class RandomIt >
void sort( RandomIt first, RandomIt last );
但std::list::iterator
是BidirectionalIterator
。
由于您要对整个列表进行排序,因此可以改为使用std::list::sort
。
l1.sort(sortByAge);