The following exposition-only alias templates may appear in deduction guides for associative containers:
template<class InputIterator>
using iter-value-type =
typename iterator_traits<InputIterator>::value_type;
template<class InputIterator>
using iter-key-type = remove_const_t<
typename iterator_traits<InputIterator>::value_type::first_type>;
template<class InputIterator>
using iter-mapped-type =
typename iterator_traits<InputIterator>::value_type::second_type;
template<class InputIterator>
using iter-to-alloc-type = pair<
add_const_t<typename iterator_traits<InputIterator>::value_type::first_type>,
typename iterator_traits<InputIterator>::value_type::second_type>;