在 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>
(即身份)没关系)?
我在像 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>
(即身份)没关系)?