Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ std::唯一指针集中的排序_C++_C++17_Stdvector_Unique Ptr_Stdset - Fatal编程技术网

C++ std::唯一指针集中的排序

C++ std::唯一指针集中的排序,c++,c++17,stdvector,unique-ptr,stdset,C++,C++17,Stdvector,Unique Ptr,Stdset,我在类中有一个std::组唯一指针,如std::set my_set{},我想编写一个方法,生成这些唯一指针指向的值的排序向量 目前我有: auto convert() -> std::vector<T> { auto vec = std::vector<T>(); for (auto const& element : my_set) { vec.push_back(elemen

我在类中有一个std::组唯一指针,如
std::set 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;
        }
auto convert()->std::vector{
auto-vec=std::vector();
用于(自动常量和元素:我的集合){
vec.push_back(element.get());
}
返回向量;
}
但是,我不确定这是否会产生我想要的所需排序?有谁知道我如何对集合中的指针进行排序,使指向的值按递增顺序排列(这意味着我可以将每个指针推回集合)


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

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


实际上我觉得这个设计很让人困惑。。。如果您关心标识(因此您有唯一的指针),那么如何使用作为值容器的
std::vector
(即标识不重要)?

您需要一个带有自定义比较器的集合。但是在集合中,我想要的是值,而不是唯一的指针-还有方法吗?我可以使用:std::transform吗(my_set.begin()、my_set.end()、vec.begin()、[](std::unique_ptr ptr)->T{return ptr.get();});对于更广泛的项目,有一些具体的要求,但无论如何还是要感谢您