为什么只有std::list::sort()
why only std::list::sort()?
可能重复:
使用stl排序函数对列表进行排序
C++标准库给出了严格的线性序列容器、线性序列容器和关联容器。
std::sort()
适用于各种容器。但为什么它只提供列表排序。std::list::sort()
?
std::sort
仅适用于随机访问容器。标准库中唯一有意义排序的非随机访问容器是std::list
。
std::sort
当然不能像您想象的那样在关联容器上工作。这有什么意义?关联容器是通过其键的值访问的,而不是通过位置访问的。
正如Mike所指出的,C++11也有std::forward_list
,它也有自己的排序函数,这绝非偶然。
std::sort
仅适用于随机访问迭代器,但std::list
仅提供双向迭代器。因此,由于它不能与std::sort
一起使用,因此它需要自己的实现,该实现也可能针对双链表进行更优化。
同样,不能将std::map
或std::set
迭代器与std::sort
一起使用。但对于这些,你无论如何都不需要它,因为它们总是被分类的。
作为旁注,还存在std::map::find
等。这些确实不是必需的,因为您可以将所有迭代器与std::find
一起使用。但成员函数版本为单个容器提供了优化算法,这比std::find
的线性复杂度更有效。
相关文章:
- 使用std::multimap迭代器创建std::list
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- 为什么 std::unique 不调用 std::sort?
- 如何在 C 中正确使用 libiconv 使其不会报告"Arg list too long"?
- C++中带有List类的迭代器Segfault
- 使用"std::unordereded_map"映射到"std::list"对象
- GCC对可能有效的代码抛出init list生存期警告
- 使用std::list创建循环链表
- 如何使用list::sort()对STL列表对象进行排序,同时将自定义排序函数作为参数传递给list::排序
- 使用我自己的list.sort()逻辑,试图模仿其他来源,为什么我会因为看似正确的格式而出错
- 我可以让 std::list 按顺序插入新元素吗?或者必须使用std::sort
- 使用 std::sort 对 std::list 进行排序
- std::list.sort(谓词)编译器错误
- C++中的Merge Sort Singly Linked List在大输入时失败
- 使用std::list::sort会挂起我的程序
- 为什么 std::sort 在 std::list 上不起作用?
- Std:list.sort(),二元谓词
- 为什么只有std::list::sort()
- std::list.sort()的奇怪效率
- Error in C++ list::sort