可能重复:
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支持列表吗?
答案 0 :(得分:41)
您无法使用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);
答案 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);