嗯,如果要给链表写排序的确得稍微换点方式,特别是标准库的链表还得用迭代器。
这是一个手写简单版:
void sortlist(list<person>& l)
{
list<person>::iterator pos1,pos2;
bool moved = true;
while(moved)
{
moved = false;
pos1 = pos2 = l.begin();
++pos2;
while(pos2 != l.end())
{
if((pos2->name) < (pos1->name))
{
person tmp = *pos2;
*pos2 = *pos1;
*pos1 = tmp;
moved = true;
}
++pos1;
++pos2;
}
}
}
调用的时候直接:sortlist(l);就可以了。当然这个是只适用于你的那个list<person> l类型的定义的。
当然可以用模板把上述函数写的更通用些,适用于各种list:
template<typename ListT>
void sortlist(ListT& l)
{
typename ListT::iterator pos1,pos2;
bool moved = true;
while(moved)
{
moved = false;
pos1 = pos2 = l.begin();
++pos2;
while(pos2 != l.end())
{
if((*pos2) < (*pos1))
{
typename ListT::value_type tmp = *pos2;
*pos2 = *pos1;
*pos1 = tmp;
moved = true;
}
++pos1;
++pos2;
}
}
}
当然这个通用版本的排序就和标准库的一样,要求你的元素能自己支持比较运算才行了。
----------------------
不过建议还是尽量使用list自带的sort函数,毕竟那个效率和可靠性都好很多。来自:求助得到的回答
温馨提示:答案为网友推荐,仅供参考