У меня есть набор std::set<std::unique_ptr<T>, compare> myset{};
, где сравнение
struct compare {
auto operator()(std::unique_ptr<T> const& a, std::unique_ptr<T> const& b) const noexcept -> bool
{
return a.get() < b.get();
}
};
Это (надеюсь, но я мог ошибаться), сортирует уникальные указатели в наборе таким образом, что базовые значения находятся в порядке возрастания (содержимое памяти, а не адреса указателей). Затем у меня есть следующий код для создания вектора значений, на которые указывают вышеупомянутые уникальные указатели:
auto vec = std::vector<T>();
std::transform(myset.begin(), myset.end(), vec.begin(), [&](std::unique_ptr<T> ptr) -> T {
return ptr.get();
});
return vec;
Но этот код не работает из-за ошибки в способе, которым я разработал преобразование, очевидно - правильно ли я «разыменовываю» (получаю значения, на которые указывают указатели) уникальные указатели?