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

时间:2016-01-26 19:39:00

标签: c++ type-conversion stdvector stdset

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

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

但是,我需要保持向量元素的顺序。我怎么能这样做?

2 个答案:

答案 0 :(得分:3)

如果没有对矢量进行排序,则不能。 std::set将内容保持为升序或降序。

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

您可能希望看到:How to remove duplicates from unsorted std::vector while keeping the original ordering using algorithms?

答案 1 :(得分:2)

当且仅当您的vector按严格的弱排序排序时才能执行此操作,例如按<排序以获取数字。在这种情况下,请为set提供适当的比较对象(您用来对vector进行排序的对象)并且订单适合。

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