c++ - 在 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(); });
吗?
解决方案
该集合按指针值排序,而不是按值排序;所以您需要在之后对结果进行排序(请注意,可能存在重复,因为指针指向唯一实例,但指向的值可能与 上的顺序关系等效T
)。
我实际上发现这个设计很混乱......如果你关心身份(所以你有唯一的指针)怎么可能使用作为std::vector<T>
值的容器(即身份无关紧要)?
推荐阅读
- bash - mp4chaps 的 mp3 文件的时间长度
- anaconda - 如何解决不一致的环境 - Jupyter Lab
- r - 如何将兼容版本的 devtools 安装到 R 3.5.1?
- r - 从 systemfit 模型制作乳胶表?
- javascript - 如何使用 querySelector 在锚标记的 href 属性末尾定位哈希?
- javascript - 为什么即使我只导出一个函数,整个 javascript 文件也会执行
- swift - NSCollectionView 中的标题大小错误
- swift - 如何在一个 vc 中设置计时器并在另一个 vc 中触发它
- c - 通信独立的 C 模块
- tensorflow - 张量流模型动物园中的未知检查点文件