在 std::set 个唯一指针中排序

ordering in std::set of unique pointers

我在像 std::set<std::unique_ptr<T>> my_set{}; 这样的 class 中有一个 std::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(); });?

集合按指针值排序,不是按值排序;所以你需要对结果进行排序(注意可能有重复,因为指针指向唯一实例,但指向的值可能等同于 T 上的顺序关系)。

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