为什么std :: sort不能在std :: list上运行?

时间:2011-12-06 13:34:06

标签: c++

由于std::sort上的std::list,我收到以下错误:

line 44         : instantiated from here
line 5258 : error: no match for 'operator-' in '_last -__first'
line 179 : note: candidates are: ptrdiff_t std::operator-(const std::_Bit_iterator_base&, const std::_Bit_iterator_base&)

从以下代码:

int main()
{
    std::list<Student_info> students;
    Student_info record;
    string::size_type maxlen = 0;   // the length of the longest name

    // read and store all the students data.
    while (read(cin, record))
    {
        // find length of longest name
        maxlen = max(maxlen, record.name.size());
        students.push_back(record);
    }

    // alphabetize the student records
    std::sort(students.begin(), students.end(), compare);

    return 0;
}

导致这些错误的原因是什么?如何对此列表进行排序?

2 个答案:

答案 0 :(得分:10)

您的错误意味着sort函数试图在迭代器上使用减法。只有随机访问迭代器才支持此操作。 std::list具有双向迭代器。 std::sort仅适用于随机访问迭代器。幸运的是,std::list has it's own sort function

students.sort(compare);

答案 1 :(得分:3)

使用列表成员函数排序

students.sort(compare);