C++ std::唯一指针集中的排序
我在类中有一个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::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();});对于更广泛的项目,有一些具体的要求,但无论如何还是要感谢您