为什么只有std :: list :: sort()?

时间:2011-11-03 13:58:40

标签: c++ sorting stl

  

可能重复:
  Sort list using stl sort function

C ++标准库提供严格的线性序列容器,线性序列容器,关联容器。

std::sort()可用于各种容器。但为什么只提供列表排序。 std::list::sort()

2 个答案:

答案 0 :(得分:12)

std::sort仅适用于随机访问容器。标准库中唯一可以排序的非随机访问容器是std::list

正如您所想的那样,

std::sort肯定不适用于关联容器。这有什么意义呢?关联容器可以通过其键的值访问,而不是按位置访问。

正如迈克所指出的,C ++ 11也有std::forward_list,这也不例外,它也有自己的排序功能。

答案 1 :(得分:6)

std::sort仅适用于随机访问迭代器,但std::list仅提供biderectional迭代器。因为它不能与std::sort一起使用,所以它需要自己的实现,对于双向链表也可能更加优化。

同样,您无法将std::mapstd::set迭代器与std::sort一起使用。但是对于这些你无论如何都不需要它,因为它们总是被分类。

作为旁注,还有std::map::find之类。这些确实不是必需的,因为您可以使用std::find的所有迭代器。但成员函数版本为各个容器提供了优化算法,这比std::find的线性复杂度更有效。