使用sort()算法c ++对对象列表进行排序

时间:2016-12-05 20:45:55

标签: c++ algorithm sorting

我在使用排序算法和对象列表时遇到问题。这是我的代码

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

2 个答案:

答案 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::iteratorBidirectionalIterator

由于您要对整个列表进行排序,因此可以改为使用std::list::sort

l1.sort(sortByAge);