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

why only std::list::sort()?

本文关键字:sort list 为什么 std      更新时间:2023-10-16

可能重复:
使用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::mapstd::set迭代器与std::sort一起使用。但对于这些,你无论如何都不需要它,因为它们总是被分类的。

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