Ane*_*nan 13 c++ sorting list std
我的问题是我们可以使用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)
您应该使用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)
| 归档时间: |
|
| 查看次数: |
18224 次 |
| 最近记录: |