9#include <boost/iterator/transform_iterator.hpp>
15 template <
typename It>
18 using first_value_type =
typename It::value_type::first_type;
20 using decay_first_value_type =
typename std::remove_cv_t<typename std::remove_reference_t<first_value_type>>;
22 using ref_to_first = decay_first_value_type &;
24 return boost::make_transform_iterator(it, [](
auto &pair) -> ref_to_first {
return pair.first; });
27 template <
typename It>
30 using first_value_type =
typename It::value_type::first_type;
32 using decay_first_value_type =
typename std::remove_cv_t<typename std::remove_reference_t<first_value_type>>;
36 using const_ref_to_first =
const decay_first_value_type &;
37 return boost::make_transform_iterator(it, [](
const auto &pair) -> const_ref_to_first {
return pair.first; });
50 template <
typename It>
52 using second_value_type =
typename It::value_type::second_type;
53 using decay_second_value_type =
typename std::remove_cv_t<typename std::remove_reference_t<second_value_type>>;
54 using ref_to_second = decay_second_value_type &;
56 return boost::make_transform_iterator(it, [](
auto &pair) -> ref_to_second {
return pair.second; });
60 template <
typename It>
62 using second_value_type =
typename It::value_type::second_type;
63 using decay_second_value_type =
typename std::remove_cv_t<typename std::remove_reference_t<second_value_type>>;
64 using const_ref_to_second =
const decay_second_value_type &;
66 return boost::make_transform_iterator(it, [](
const auto &pair) -> const_ref_to_second {
return pair.second; });
static auto make_map_keys_const_iterator(It it)
创建一个迭代器,该迭代器提供对map键的const引用的遍历。
static auto make_map_values_iterator(It it)
创建一个迭代器,该迭代器提供对map值的非const引用的遍历。
static auto make_map_keys_iterator(It it)
创建一个迭代器,遍历map中键的非const引用
static auto make_map_values_const_iterator(It it)
创建一个迭代器,该迭代器提供对map值的const引用的遍历。