如何对 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 倍。
正在寻找一种对可选容器进行排序的方法,如下所示...
#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 倍。