如何对 std::optional 类型的容器进行排序?

How to sort container with std::optional type?

正在寻找一种对可选容器进行排序的方法,如下所示...

#include <optional>
#include <vector>

using optional = std::optional<int>;
std::vector<optional> cont;

int main()
{
   auto min_iter = std::min_element(cont.begin(), cont.end());
   std::sort(cont.begin(), cont.end());
}

保证 max/min 元素通过 has_value()

using optional = std::optional<int>;
std::vector<optional> cont = {2, 1, 4, {}, 7};

std::sort(cont.begin(), cont.end());

// Find first which passes has_value(), as sorted this should be minimum.
auto min_iter = std::find_if(cont.cbegin(), cont.cend(), 
     [](const auto& element) { 
         return element.has_value(); 
     }
 );
// Find last which passes has_value(), as sorted this should be maximum.
auto max_iter = std::find_if(cont.crbegin(), cont.crend(), 
    [](const auto& element) { 
        return element.has_value(); 
    }
);
auto min_value = min_iter->value();
auto max_value = max_iter->value();

我是一个简单的人,喜欢简单的解决方案,所以是的,它最多可以通过容器 2 倍。