| 发表于:2007-01-23 11:32:3226楼 得分:1 |
vc 的 stl 烂在哪里? 摘抄一段下来以供欣赏,vc2003的 map template <class _kty, class _ty, class _pr, class _alloc> inline void swap(map <_kty, _ty, _pr, _alloc> & _left, map <_kty, _ty, _pr, _alloc> & _right) { // swap _left and _right maps _left.swap(_right); } // template class multimap template <class _kty, class _ty, class _pr = less <_kty> , class _alloc = allocator <pair <const _kty, _ty> > > class multimap : public _tree <_tmap_traits <_kty, _ty, _pr, _alloc, true> > { // ordered red-black tree of {key, mapped} values, non-unique keys public: typedef multimap <_kty, _ty, _pr, _alloc> _myt; typedef _tree <_tmap_traits <_kty, _ty, _pr, _alloc, true> > _mybase; typedef _kty key_type; typedef _ty mapped_type; typedef _ty referent_type; // retained typedef _pr key_compare; typedef typename _mybase::value_compare value_compare; typedef typename _mybase::allocator_type allocator_type; typedef typename _mybase::size_type size_type; typedef typename _mybase::difference_type difference_type; typedef typename _mybase::pointer pointer; typedef typename _mybase::const_pointer const_pointer; typedef typename _mybase::reference reference; typedef typename _mybase::const_reference const_reference; typedef typename _mybase::iterator iterator; typedef typename _mybase::const_iterator const_iterator; typedef typename _mybase::reverse_iterator reverse_iterator; typedef typename _mybase::const_reverse_iterator const_reverse_iterator; typedef typename _mybase::value_type value_type; multimap() : _mybase(key_compare(), allocator_type()) { // construct empty map from defaults } explicit multimap(const key_compare& _pred) : _mybase(_pred, allocator_type()) { // construct empty map from comparator } multimap(const key_compare& _pred, const allocator_type& _al) : _mybase(_pred, _al) { // construct empty map from comparator and allocator } template <class _iter> multimap(_iter _first, _iter _last) : _mybase(key_compare(), allocator_type()) { // construct map from [_first, _last), defaults for (; _first != _last; ++_first) insert(*_first); } template <class _iter> multimap(_iter _first, _iter _last, const key_compare& _pred) : _mybase(_pred, allocator_type()) { // construct map from [_first, _last), comparator for (; _first != _last; ++_first) insert(*_first); } template <class _iter> multimap(_iter _first, _iter _last, const key_compare& _pred, const allocator_type& _al) : _mybase(_pred, _al) { // construct map from [_first, _last), comparator, and allocator for (; _first != _last; ++_first) insert(*_first); } iterator insert(const value_type& _val) { // insert a {key, mapped} value return (_mybase::insert(_val).first); } iterator insert(iterator _where, const value_type& _val) { // insert a {key, mapped} value, with hint return (_mybase::insert(_where, _val)); } template <class _iter> void insert(_iter _first, _iter _last) { // insert [_first, _last), arbitrary iterators for (; _first != _last; ++_first) insert(*_first); } }; | | |
|