我有一个std::tuple< std::optional<Args> ... >
,需要检查每个元素都有一个值。我已经用std::index_sequence实现了它。但是我不确定这是最快编译时间的最有效的解决方案。
using data_type = std::tuple< std::optional<Arg_1>,
std::optional<Arg_2>,
//....
std::optional<Arg_n> // where n > 40
>;
// My solution.
template <size_t ... indexes>
bool has_value_all_elements_impl(const data_type& tuple_data, std::index_sequence<indexes ...> ) {
//I assume there O(n) lookup for each index in compile time.
// So total O(n^2) lookup for tuple ?
return (std::get<indexes>(tuple_data).has_value() && ... ) ;
}
bool has_value_all_elements(data_type const& tuple_data)
{
return has_value_all_elements_impl(
tuple_data, std::make_index_sequence<std::tuple_size<data_type>::value>{});
}
对于这样的问题,有没有更有效的O(n)算法?
时间复杂度O(n)
1条答案
按热度按时间siotufzp1#
我决定回答我自己的问题。
看来"慢性评论"是对的。
海湾合作委员会:
铿锵: