首页 > 解决方案 > 在 std::set 唯一指针中排序

问题描述

我在类中有一个 std::set 唯一指针std::set<std::unique_ptr<T>> my_set{};,我想编写一个方法来生成这些唯一指针指向的值的排序向量。

目前我有:

auto convert() -> std::vector<T> {
            auto vec = std::vector<T>();
            for (auto const& element : my_set) {
                vec.push_back(element.get());
            }
            return vec;
        }

但是,我不确定这会产生我想要的所需排序吗?有谁知道我如何对集合中的指针进行排序,以使指向的值按递增顺序排列(这意味着我可以将每个指针推回集合中)?

编辑:我可以使用这个问题std::transform(my_set.begin(), my_set.end(), vec.begin(), [](std::unique_ptr<T> ptr) -> T { return ptr.get(); });吗?

标签: c++c++17stdvectorunique-ptrstdset

解决方案


该集合按指针值排序,而不是按值排序;所以您需要在之后对结果进行排序(请注意,可能存在重复,因为指针指向唯一实例,但指向的值可能与 上的顺序关系等效T)。

我实际上发现这个设计很混乱......如果你关心身份(所以你有唯一的指针)怎么可能使用作为std::vector<T>值的容器(即身份无关紧要)?


推荐阅读