#ifndef MAP_HPP # define MAP_HPP # include "colors.h" # include // std::allocator # include // NULL, std::size_t, std::ptrdiff_t # include // std::less, std::binary_function # include "pair.hpp" //# include "bst.hpp" namespace ft { template < class Key, // map::key_type class T, // map::mapped_type class Compare = std::less, // map::key_compare class Alloc = std::allocator< ft::pair > // map::allocator_type > class map { public: typedef Key key_type; typedef T mapped_type; typedef pair value_type; typedef std::size_t size_type; typedef std::ptrdiff_t difference_type; typedef Compare key_compare; typedef Alloc allocator_type; // typedef typename allocator_type::reference reference; // typedef typename allocator_type::const_reference const_reference; // typedef typename allocator_type::pointer pointer; // typedef typename allocator_type::const_pointer const_pointer; // typedef Bst bst_map; // typedef typename bst_map::iterator iterator; // typedef typename bst_map::const_iterator const_iterator; // typedef typename bst_map::reverse_iterator reverse_iterator; // typedef typename bst_map::const_reverse_iterator const_reverse_iterator; /**************** * member class : ****************/ // // https://en.cppreference.com/w/cpp/container/map/value_compare // class value_compare : public std::binary_function // { // friend class map; // protected: // Compare comp; // value_compare(Compare c) : comp(c) {} // public: // bool operator() (const value_type& x, const value_type& y) const // { return comp(x.first, y.first); } // }; /************ * copliens : ************/ //// constructors ------------------------------ explicit map (const key_compare& comp = key_compare(), const allocator_type& alloc = allocator_type()); // template // map (InputIterator first, InputIterator last, // const key_compare& comp = key_compare(), // const allocator_type& alloc = allocator_type()); // map (const map& x); //// destructor -------------------------------- // ~map(); //// operator= --------------------------------- // map& operator= (const map& x); /************* * iterators : *************/ //// begin ------------------------------------- // iterator begin(); // const_iterator begin() const; //// end --------------------------------------- // iterator end(); // const_iterator end() const; //// rbegin ------------------------------------ // reverse_iterator rbegin(); // const_reverse_iterator rbegin() const; //// rend -------------------------------------- // reverse_iterator rend(); // const_reverse_iterator rend() const; /************ * capacity : ************/ //// empty ------------------------------------- // bool empty() const; //// size -------------------------------------- // size_type size() const; //// max_size ---------------------------------- // size_type max_size() const; /****************** * element access : ******************/ //// operator[] -------------------------------- // mapped_type & operator[] (const key_type& k); /************* * modifiers : *************/ //// insert ------------------------------------ // pair insert (const value_type& val); // iterator insert (iterator position, const value_type& val); // template // void insert (InputIterator first, InputIterator last); //// erase ------------------------------------- // void erase (iterator position); // size_type erase (const key_type& k); // void erase (iterator first, iterator last); //// swap -------------------------------------- // void swap (map& x); //// clear ------------------------------------- // void clear(); /************* * observers : *************/ //// key_comp ---------------------------------- // key_compare key_comp() const; //// value_comp -------------------------------- // value_compare value_comp() const; /************** * operations : **************/ //// find -------------------------------------- // iterator find (const key_type& k); // const_iterator find (const key_type& k) const; //// count ------------------------------------- // size_type count (const key_type& k) const; //// lower_bound ------------------------------- // iterator lower_bound (const key_type& k); // const_iterator lower_bound (const key_type& k) const; //// upper_bound ------------------------------- // iterator upper_bound (const key_type& k); // const_iterator upper_bound (const key_type& k) const; //// equal_range ------------------------------- // pair equal_range (const key_type& k) const; // pair equal_range (const key_type& k); /************* * allocator : *************/ //// get_allocator ----------------------------- // allocator_type get_allocator() const; private: allocator_type _allocator; key_compare _comp; }; /************************ * non-member functions : ************************/ //// operator == ------------------------------- //template< class K, class T, class Comp, class Alloc > bool operator== // ( const std::map& lhs, const std::map& rhs ); //// operator != ------------------------------- //template< class K, class T, class Comp, class Alloc > bool operator!= // ( const std::map& lhs, const std::map& rhs ); //// operator < -------------------------------- //template< class K, class T, class Comp, class Alloc > bool operator< // ( const std::map& lhs, const std::map& rhs ); //// operator <= ------------------------------- //template< class K, class T, class Comp, class Alloc > bool operator<= // ( const std::map& lhs, const std::map& rhs ); //// operator > -------------------------------- //template< class K, class T, class Comp, class Alloc > bool operator> // ( const std::map& lhs, const std::map& rhs ); //// operator >= ------------------------------- //template< class K, class T, class Comp, class Alloc > bool operator>= // ( const std::map& lhs, const std::map& rhs ); //// swap (map) ----------------------------- //template< class Key, class T, class Compare, class Alloc > void swap // ( std::map& lhs, std::map& rhs ); } // namespace ft # include "map.tpp" #endif