#include "iterator.h"
#include "utility.h"
#include "functional.h"
#include "memory.h"
#include "empty.h"

namespace std {

template <typename _Key, typename _Tp, typename _Compare = std::less<_Key>,
          typename _Alloc = std::allocator<_Key>>
class multimap {
public:
  multimap();
  multimap(const multimap&);
  multimap(multimap&&);
  multimap(std::initializer_list<std::pair<const _Key, _Tp>>);
  ~multimap();

  typedef std::pair<const _Key, _Tp> value_type;
  typedef std::__iterator<value_type> iterator;
  typedef std::__iterator<value_type> const_iterator;

  iterator begin();
  iterator end();
  const_iterator cbegin();
  const_iterator cend();
};

template <typename _Key, typename _Tp, typename _Compare = std::less<_Key>,
          typename _Alloc = std::allocator<_Key>>
class map {
public:
  map();
  map(const map&);
  map(map&&);
  map(std::initializer_list<std::pair<const _Key, _Tp>>);
  ~map();

  typedef std::pair<const _Key, _Tp> value_type;
  typedef std::__iterator<value_type> iterator;
  typedef std::__iterator<value_type> const_iterator;

  iterator begin();
  iterator end();
  const_iterator cbegin();
  const_iterator cend();
};
} // namespace std
