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

时间:2012-05-18 12:28:42

标签: c++ list sorting std

  

可能重复:
  Sort list using stl sort function
  why only 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());

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

错误就像

  

C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ include \ xutility(1158):         看到'std :: operator - '的声明         1&gt; C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ include \ algorithm(3642):         错误C2784:'_ Base1 :: difference_type std :: operator -         (const std :: _ Revranit&lt; _RanIt,_Base&gt;&amp;,const std :: _ Revranit&lt; _RanIt2,_Base2&gt;&amp;)':         无法推断'const std :: _ Revranit&lt; _RanIt,_Base&gt;的模板参数&安培;”         来自'std :: _ List_iterator&lt; _Mylist&gt;'           1 GT;同           1 GT; [           1 GT; _Mylist =标准:: _ List_val&GT;           1 GT; ]

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

2 个答案:

答案 0 :(得分:41)

您无法使用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);

答案 1 :(得分:8)

您应该使用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);