使用 std::sort 对 std::list 进行排序

sorting std::lists using std::sort

本文关键字:std 排序 sort 使用 list      更新时间:2023-10-16

可能的重复项:
使用 stl 排序功能对列表进行排序

我的问题是我们可以使用 std::sort 函数对两个 std::list 进行排序吗?我有 2 个字符串列表

  std::list<std::string>list1, list2;
  .....//entering values to list
  std::sort(list1.begin(), list1.end());
  std::sort(list2.begin(), list2.end());

当我对这些列表进行排序时,我收到错误。我尝试使用 std::vector,此时排序有效。

错误就像

C:\Program Files (x86(\Microsoft Visual Studio 10.0\VC\include\xutility(1158( :请参阅"std::运算符 -"的声明1>C:\Program Files (x86(\Microsoft Visual Studio 10.0\VC\include\algorithm(3642(:错误 C2784: '_Base1::d ifference_type std::operator -(const std::_Revranit<_RanIt,_Base> &,const std::_Revranit<_RanIt2,_Base2> &(' :无法推断出"const std::_Revranit<_RanIt,_Base> &"的模板参数来自 'std::_List_iterator<_Mylist>'1>1> [1> _Mylist=std::_List_valstd::string,std::allocator<std::string>1> ]

我必须知道只有 std::sort 支持列表?

你不能使用std::sortstd::list进行排序,因为std::sort要求迭代器是随机访问的,并且std::list迭代器只是双向的。

但是,std::list有一个成员函数sort可以对其进行排序:

list.sort();
// if you want to use a comparator different from the default one:
// list.sort(comparator);
你应该使用

list::sort ,它可能使用不同的算法。 std::sort需要随机访问迭代器(支持任意大小的跳转(,而列表迭代器一次只能向前或向后移动一个链接。

见C++11 25.4.1.1:

template<class RandomAccessIterator> void sort(RandomAccessIterator first, 
         RandomAccessIterator last);

和 23.3.5.5/27(std::list 成员(:

void sort();
template <class Compare> void sort(Compare comp);