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

Ane*_*nan 13 c++ sorting list std

可能重复:
使用stl排序函数排序列表
为什么只有std :: list :: sort()?

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

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

  std::sort(list2.begin(), list2.end());
Run Code Online (Sandbox Code Playgroud)

虽然我正在整理这些列表,但我收到了错误.我尝试使用std :: vector,此时排序有效.

错误就像

C:\ Program Files(x86)\ Microsoft Visual Studio 10.0\VC\include\xutility(1158):请参阅'std :: operator - '1> C:\ Program Files(x86)\ Microsoft Visual Studio 10.0\VC的声明\ include\algorithm(3642):错误C2784:'_ Base1 :: difference_type std :: operator - (const std :: _ Revranit <_RanIt,_Base>&,const std :: _ Revranit <_RanIt2,_Base2>&)':不能从'std :: _ List_iterator <_Mylist>'1>推导'const std :: _ Revranit <_RanIt,_Base>&'的模板参数1> [1> _Mylist = std :: _ List_val> 1>]

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

小智 43

您不能使用std::sort排序std::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);
Run Code Online (Sandbox Code Playgroud)


Pot*_*ter 9

您应该使用list::sort,可能使用不同的算法.std::sort需要随机访问迭代器(支持任意大小的跳转),而列表迭代器一次只能通过一个链接前进或后退.

参见C++ 11 25.4.1.1:

template<class RandomAccessIterator> void sort(RandomAccessIterator first, 
         RandomAccessIterator last);
Run Code Online (Sandbox Code Playgroud)

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

void sort();
template <class Compare> void sort(Compare comp);
Run Code Online (Sandbox Code Playgroud)