如何将 std::vector 转换为 std::set 而不会丢失顺序

how to convert std::vector to std::set without losing the order

本文关键字:std 顺序 vector 转换 set      更新时间:2023-10-16

我使用以下代码进行转换:

std::set<ObjectType> s(v.begin(), v.end());

但是,我需要保持矢量元素的顺序。我该怎么做?

如果向量没有排序,则不能。 std::set按升序或降序保存其内容。

如果向量是有序的,那么您只需要将std::set的比较函数设置为用于对向量进行排序的任何函数。

您可能想看看:如何在使用算法保持原始顺序的同时从未排序的 std::vector 中删除重复项?

且仅当您的vector按一些严格的弱排序排序时,例如按数字<排序时,您才能这样做。在这种情况下,请为set提供适当的比较对象(用于对vector进行排序的对象),顺序将合适。

否则,如果您的vector未按拟合标准排序,则无法使set保持原始顺序,因为对元素进行排序是set的不变量之一。