&引用;稳定的;STL<;列表>;在C++; 我认为问题题目足够清楚:是否有可能稳定STD::C++列表?或者我必须把它转换成std::vector吗

&引用;稳定的;STL<;列表>;在C++; 我认为问题题目足够清楚:是否有可能稳定STD::C++列表?或者我必须把它转换成std::vector吗,c++,list,stl,stable-sort,C++,List,Stl,Stable Sort,我这样问是因为我尝试了一个简单的例子,它似乎需要RandomAccessIterator,而链表没有。那么,如何对std::list()进行稳定排序 编辑:给出错误的示例代码: #include <list> #include <algorithm> // ... list<int> the_list; stable_sort(the_list.begin(), the_list.end()); #包括 #包括 // ... 列出清单; 稳定的_排序(_li

我这样问是因为我尝试了一个简单的例子,它似乎需要RandomAccessIterator,而链表没有。那么,如何对std::list()进行稳定排序

编辑:给出错误的示例代码:

#include <list>
#include <algorithm>
// ...
list<int> the_list;
stable_sort(the_list.begin(), the_list.end());
#包括
#包括
// ...
列出清单;
稳定的_排序(_list.begin()、_list.end());

g++给了我大约30行错误(太长而无法粘贴),其中一些错误涉及随机访问迭代器(还有一些称为_merge_sort_loop)。这有点奇怪,因为我见过一些链表的合并排序实现,它们基本上是“连续的”。

std::list::sort已经很稳定了。根据标准第23.2.24节:“注:稳定:保留等效元素的相对顺序。”

这是不够的信息。将您的问题简化为一段相当短的代码,然后发布它。告诉我们什么编译器(如有必要,还有什么库),以及实际的错误消息是什么。在这一点上,我们可能是有用的。现在,任何答案都只是猜测。这些信息足以给出正确的答案(内森已经在下面给出了)。除非另有说明,编译器和库可以被假定为完全ISO C++的,在这种情况下它是完全不含糊的。现在信息足够了,我赞扬Rafael Almeida在那里得到的效率。但仍然奇怪的是,它们有一个稳定的算法。稳定的算法用于std::vector和其他通用容器。请记住,这些算法并不与容器绑定,但可能有一些特定的算法容器对不能一起工作。