可能重复:
使用stl sort函数对列表进行排序
C++标准库提供了严格的线性序列容器、线性序列容器和关联容器。
std::sort()
可用于所有类型的容器。但为什么它只为列表提供 std::list::sort()
?
可能重复:
使用stl sort函数对列表进行排序
C++标准库提供了严格的线性序列容器、线性序列容器和关联容器。
std::sort()
可用于所有类型的容器。但为什么它只为列表提供 std::list::sort()
?
std::sort
只适用于随机访问容器。标准库中唯一有意义的非随机访问容器是 std::list
。
std::sort
显然不适用于关联式容器,正如你所想的那样。这有什么意义呢?关联式容器是按键值访问的,而不是按位置访问的。
正如 Mike 所指出的,C++11 还引入了 std::forward_list
,也有自己的排序函数。
std::forward_list
。 - Mike Seymourstd::sort
重新分配元素,而std::list::sort
移动节点而不触及它们的值。 - Kerrek SBstd::sort
只适用于随机访问迭代器,但 std::list
仅提供双向迭代器。因此它不能与 std::sort
一起使用,需要自己实现,这也可能更适用于双向链表的优化算法。
同样,您也无法将 std::map
或 std::set
迭代器与 std::sort
一起使用。但是对于这些情况,您根本不需要使用它,因为它们总是已排序的。
顺便说一下,还有 std::map::find
等函数。虽然可以使用所有迭代器与 std::find
,但成员函数版本提供了针对各个容器的优化算法,这比 std::find
的线性复杂度更有效率。