00001
00009
00010
00065 template <class K, class T, class Pr = std::less<K>, class R = RNG >
00066 class AutoKeyedSSkipList
00067 {
00068 public:
00069 class T0;
00070 class T1;
00071 friend class T0;
00072 friend class T1;
00074 typedef size_t size_type;
00076
00079 typedef ptrdiff_t difference_type;
00081 typedef AutoKeyedSSkipList<K,T,Pr,R> container_type;
00083 typedef K key_type;
00085 typedef std::pair<const K, T> value_type;
00087 typedef ForwardIdxNode<value_type> node_type;
00089
00094 typedef T0 iterator;
00096 typedef value_type* pointer;
00098 typedef value_type& reference;
00100 typedef T data_type;
00102 typedef T mapped_type;
00104 typedef T& mapped_type_reference;
00106 typedef const T const_mapped_type;
00108 typedef const T& const_mapped_type_reference;
00110 typedef const T& const_reference;
00112 typedef T1 const_iterator;
00114
00117 typedef std::reverse_iterator<iterator> reverse_iterator;
00119 typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
00121 typedef std::pair<iterator, bool> slpair;
00123 typedef std::pair<iterator, iterator> ipair;
00125 typedef std::pair<const_iterator, const_iterator> const_ipair;
00127 typedef Pr key_compare;
00128
00130 class value_compare
00131 : public std::binary_function<value_type, value_type, bool>
00132 {
00133 friend container_type;
00134 public:
00135 bool operator()(const value_type& left, const value_type& right) const
00136 {return (comp(left.first, right.first)); }
00137 protected:
00138 value_compare(const key_compare &pr) : comp(pr) {}
00139 key_compare comp;
00140 };
00141
00142 private:
00143 R rng;
00144 key_compare KeyCompare;
00145 value_compare ValueCompare;
00146 unsigned int maxLevel;
00147 unsigned int level;
00148 node_type *head;
00149 node_type *tail;
00150 double probability;
00151 size_type items;
00152 mutable size_type scan_index;
00153 mutable std::pair<size_type,node_type*> *update;
00154
00156
00160 void Init(double probability,unsigned int maxLevel) {}
00161
00163
00168 node_type* Alloc(unsigned int level, const T &obj) {}
00169
00171
00175 node_type* Alloc(unsigned int level) {}
00176
00178
00181 void Free(node_type *item) {}
00182
00184
00187 unsigned int GenerateRandomLevel() const {}
00188
00190 void adjust_levels() {}
00191
00193
00199 void scan(const key_type &val) const{}
00200
00202
00208 void scan(const value_type &val) const{}
00209
00211
00217 void scan(size_type index) const{}
00218
00220
00226 void scan(const node_type *nodex) const{}
00227
00229
00236 void scan(const iterator &where) const{}
00237 public:
00238
00240
00243 class T0 : public std::iterator<std::random_access_iterator_tag, value_type>
00244 {
00245 public:
00246 typedef std::iterator<std::random_access_iterator_tag, value_type> baseclass;
00247 typedef std::random_acces_iterator_tag iterator_category;
00248 typedef typename baseclass::value_type value_type;
00249 typedef typename const baseclass::value_type* pointer;
00250 typedef typename const baseclass::value_type& reference;
00251 typedef ptrdiff_t difference_type;
00252
00253 friend T1;
00254 friend container_type;
00255 private:
00256 container_type *container;
00257 mutable size_type Findex;
00258 node_type* node;
00259 public:
00261 T0() {}
00262
00264
00267 T0(const T0 &t0){}
00268
00270
00273 T0(const T1 &t1){}
00274
00276
00282 T0(container_type *container, node_type* p){}
00283
00285
00290 T0(container_type *container, node_type* p, size_type index){}
00291
00293
00296 bool operator==(const T0& other) const{}
00297
00299
00302 bool operator!=(const T0& other) const{}
00303
00305
00308 bool operator==(const T1& other) const{}
00309
00311
00314 bool operator!=(const T1& other) const{}
00315
00317
00322 T0& operator++(){}
00323
00325
00330 T0 operator++(int){}
00331
00333
00338 T0& operator--(){}
00339
00341
00346 T0 operator--(int){}
00347
00349
00354 reference operator*() const{}
00355
00357
00362 pointer operator->() const{}
00363
00365
00368 bool operator<(const T0 &other) const{}
00369
00371
00374 bool operator<=(const T0 &other) const{}
00375
00377
00380 bool operator>(const T0 &other) const{}
00381
00383
00386 bool operator>=(const T0 &other) const{}
00387
00389
00392 bool operator<(const T1 &other) const{}
00393
00395
00398 bool operator<=(const T1 &other) const{}
00399
00401
00404 bool operator>(const T1 &other) const{}
00405
00407
00410 bool operator>=(const T1 &other) const{}
00411
00413
00417 T0 operator+(difference_type off) const{}
00418
00420
00424 T0 operator-(difference_type off) const{}
00425
00427
00431 T0& operator+=(difference_type off){}
00432
00434
00438 T0& operator-=(difference_type off){}
00439
00441
00445 difference_type operator-(const T0 &other) const{}
00446
00448
00452 difference_type operator-(const T1 &other) const{}
00453
00455
00461 int refresh(){}
00462
00464
00468 value_type& operator[](difference_type off) const{}
00469
00471
00474 size_type getIndex() const{}
00475 };
00476
00478
00481 class T1 : public std::iterator<std::random_access_iterator_tag, value_type, ptrdiff_t, const value_type*, const value_type&>
00482 {
00483 public:
00484 typedef std::iterator<std::random_access_iterator_tag, value_type> baseclass;
00485 typedef std::random_acces_iterator_tag iterator_category;
00486 typedef typename baseclass::value_type value_type;
00487 typedef typename const baseclass::value_type* pointer;
00488 typedef typename const baseclass::value_type& reference;
00489 typedef ptrdiff_t difference_type;
00490
00491 friend T0;
00492 friend container_type;
00493 private:
00494 const container_type *container;
00495 mutable size_type Findex;
00496 const node_type* node;
00497 public:
00499 T1() {}
00500
00502
00505 T1(const T1 &t1){}
00506
00508
00511 T1(const T0 &t0){}
00512
00514
00520 T1(container_type *container, node_type* p){}
00521
00523
00528 T1(container_type *container, node_type* p, size_type index){}
00529
00531
00534 bool operator==(const T0& other) const{}
00535
00537
00540 bool operator!=(const T0& other) const{}
00541
00543
00546 bool operator==(const T1& other) const{}
00547
00549
00552 bool operator!=(const T1& other) const{}
00553
00555
00560 T1& operator++(){}
00561
00563
00568 T1 operator++(int){}
00569
00571
00576 T1& operator--(){}
00577
00579
00584 T1 operator--(int){}
00585
00587
00592 reference operator*() const{}
00593
00595
00600 pointer operator->() const{}
00601
00603
00606 bool operator<(const T0 &other) const{}
00607
00609
00612 bool operator<=(const T0 &other) const{}
00613
00615
00618 bool operator>(const T0 &other) const{}
00619
00621
00624 bool operator>=(const T0 &other) const{}
00625
00627
00630 bool operator<(const T1 &other) const{}
00631
00633
00636 bool operator<=(const T1 &other) const{}
00637
00639
00642 bool operator>(const T1 &other) const{}
00643
00645
00648 bool operator>=(const T1 &other) const{}
00649
00651
00655 T1 operator+(difference_type off) const{}
00656
00658
00662 T1 operator-(difference_type off) const{}
00663
00665
00669 T1& operator+=(difference_type off){}
00670
00672
00676 T1& operator-=(difference_type off){}
00677
00679
00683 difference_type operator-(const T0 &other) const{}
00684
00686
00690 difference_type operator-(const T1 &other) const{}
00691
00693
00699 int refresh(){}
00700
00702
00706 value_type& operator[](difference_type off) const{}
00707
00709
00712 size_type getIndex() const{}
00713
00714 };
00715
00717
00721 AutoKeyedSSkipList(){}
00722
00724
00730 explicit AutoKeyedSSkipList(size_type maxNodes){}
00731
00733
00737 AutoKeyedSSkipList(double probability, unsigned int maxLevel){}
00738
00740
00745 AutoKeyedSSkipList(const container_type &source){}
00746
00748
00755 template<class InIt> AutoKeyedSSkipList(InIt first, InIt last){}
00756
00758
00764 template<class InIt> AutoKeyedSSkipList(InIt first, InIt last, double probability, unsigned int maxLevel){}
00765
00767
00775 template<class InIt> AutoKeyedSSkipList(InIt first, InIt last, size_type maxNodes){}
00776
00778
00784 explicit AutoKeyedSSkipList(const key_compare& comp){}
00785
00787
00795 template<class InIt> AutoKeyedSSkipList(InIt first, InIt last, const key_compare& comp){}
00796
00798
00805 template<class InIt> AutoKeyedSSkipList(InIt first, InIt last, const key_compare& comp, double probability, unsigned int maxLevel){}
00806
00808
00817 template<class InIt> AutoKeyedSSkipList(InIt first, InIt last, const key_compare& comp, size_type maxNodes) : Compare(comp){}
00818
00820
00823 ~AutoKeyedSSkipList(){}
00824
00825
00827
00833 container_type& operator=(const container_type &source){}
00834
00836
00839 iterator begin(){}
00840
00842
00845 iterator end(){}
00846
00848
00851 const_iterator begin() const{}
00852
00854
00857 const_iterator end() const{}
00858
00860
00863 reverse_iterator rbegin(){}
00864
00866
00869 reverse_iterator rend(){}
00870
00872
00875 const_reverse_iterator rbegin() const{}
00876
00878
00881 const_reverse_iterator rend() const{}
00882
00884
00887 size_type size() const{}
00888
00890
00893 bool empty() const{}
00894
00896
00899 reference front(){}
00900
00902
00905 const_reference front() const{}
00906
00908
00911 reference back(){}
00912
00914
00917 const_reference back() const{}
00918
00920 void pop_front(){}
00921
00923 void destroy_front(){}
00924
00926 void pop_back(){}
00927
00929 void destroy_back(){}
00930
00932
00936 template<class InIt> void assign(InIt first, InIt last){}
00937
00939
00949 slpair insert(const value_type& val){}
00950
00952
00958 iterator insert(const iterator &where, const value_type& val) {}
00959
00961
00965 template<class InIt> void insert(InIt first, InIt last) {}
00966
00968 void clear(){}
00969
00971 void destroy(){}
00972
00974 iterator erase(const iterator &where){}
00975
00977 iterator destroy(const iterator &where){}
00978
00980
00987 iterator erase(const iterator &first, const iterator &last){}
00988
00990
00997 iterator destroy(const iterator &first, const iterator &last){}
00998
01000
01004 size_type erase(const key_type &keyval){}
01005
01007
01011 size_type destroy(const key_type &keyval){}
01012
01014
01018 iterator erase_index(size_type index);
01019
01021
01025 iterator destroy_index(size_type index);
01026
01028
01031 void swap(container_type& right) {}
01032
01034
01037 template<class Pr1> void erase_if(Pr1 pred);
01038
01040
01043 template<class Pr4> void destroy_if(Pr4 pred);
01044
01046
01057 void cut(const iterator &first, const iterator &last, container_type& right);
01058
01060
01066 mapped_type_reference operator[](size_type index){}
01067
01069
01075 const_mapped_type_reference operator[](size_type index) const{}
01076
01078
01084 mapped_type_reference at(size_type off){}
01085
01087
01093 const_mapped_type_reference at(size_type off) const{}
01094
01096
01102 mapped_type_reference operator[](const key_type& key){}
01103
01105
01111 const_mapped_type_reference operator[](const key_type& key) const{}
01112
01114
01120 mapped_type_reference operator()(const key_type& key){}
01121
01123
01129 const_mapped_type_reference operator()(const key_type& key) const{}
01130
01132 key_compare key_comp() const { }
01133
01135 value_compare value_comp() const { }
01136
01138 size_type max_size() const{}
01139
01141
01147 const key_type& key(const value_type& value) const {}
01148
01150
01156 mapped_type& value(value_type& value) {}
01157
01159
01163 iterator find(const key_type& keyval) {}
01164
01166
01170 const_iterator find(const key_type& keyval) const {}
01171
01173
01177 size_type count(const key_type& keyval) const {}
01178
01179
01181
01185 iterator lower_bound(const key_type& keyval) {}
01186
01188
01192 const_iterator lower_bound(const key_type& keyval) const {}
01193
01195
01199 iterator upper_bound(const key_type& keyval) {}
01200
01202
01206 const_iterator upper_bound(const key_type& keyval) const {}
01207
01209
01213 ipair equal_range(const key_type& keyval) {}
01214
01216
01220 const_ipair equal_range(const key_type& keyval) const {}
01221 };
01222
01224
01229 template <class K, class T, class Pr, class R>
01230 bool operator==(const AutoKeyedSSkipList<K,T,Pr,R> &left, const AutoKeyedSSkipList<K,T,Pr,R> &right)
01231 {
01232 return ((left.size() == right.size()) &&
01233 (std::equal(left.begin(), left.end(), right.begin())));
01234
01235 }
01236
01238
01243 template <class K, class T, class Pr, class R>
01244 bool operator!=(const AutoKeyedSSkipList<K,T,Pr,R> &left, const AutoKeyedSSkipList<K,T,Pr,R> &right)
01245 {
01246 return !(left==right);
01247 }
01248
01250
01255 template <class K, class T, class Pr, class R>
01256 bool operator<(const AutoKeyedSSkipList<K,T,Pr,R> &left, const AutoKeyedSSkipList<K,T,Pr,R> &right)
01257 {
01258 return lexicographical_compare(left.begin(),left.end(),right.begin(),right.end(),left.value_comp());
01259 }
01260
01262
01267 template <class K, class T, class Pr, class R>
01268 bool operator<=(const AutoKeyedSSkipList<K,T,Pr,R> &left, const AutoKeyedSSkipList<K,T,Pr,R> &right)
01269 {
01270 return !(right < left);
01271 }
01272
01274
01279 template <class K, class T, class Pr, class R>
01280 bool operator>(const AutoKeyedSSkipList<K,T,Pr,R> &left, const AutoKeyedSSkipList<K,T,Pr,R> &right)
01281 {
01282 return (right < left);
01283 }
01284
01286
01291 template <class K, class T, class Pr, class R>
01292 bool operator>=(const AutoKeyedSSkipList<K,T,Pr,R> &left, const AutoKeyedSSkipList<K,T,Pr,R> &right)
01293 {
01294 return !(left < right);
01295 }
01296
01297
01298
01299
01300
01301
01302
01303
01304
01305
01306
01308
01363 template <class K, class T, class Pr = std::less<K>, class R = RNG >
01364 class MultiAutoKeyedSSkipList
01365 {
01366 public:
01367 class T0;
01368 class T1;
01369 friend class T0;
01370 friend class T1;
01372 typedef size_t size_type;
01374
01377 typedef ptrdiff_t difference_type;
01379 typedef MultiAutoKeyedSSkipList<K,T,Pr,R> container_type;
01381 typedef K key_type;
01383 typedef std::pair<const K, T> value_type;
01385 typedef ForwardIdxNode<value_type> node_type;
01387
01392 typedef T0 iterator;
01394 typedef value_type* pointer;
01396 typedef value_type& reference;
01398 typedef T data_type;
01400 typedef T mapped_type;
01402 typedef T& mapped_type_reference;
01404 typedef const T const_mapped_type;
01406 typedef const T& const_mapped_type_reference;
01408 typedef const T& const_reference;
01410 typedef T1 const_iterator;
01412
01415 typedef std::reverse_iterator<iterator> reverse_iterator;
01417 typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
01419 typedef std::pair<iterator, iterator> ipair;
01421 typedef std::pair<const_iterator, const_iterator> const_ipair;
01423 typedef Pr key_compare;
01424
01426 class value_compare
01427 : public std::binary_function<value_type, value_type, bool>
01428 {
01429 friend container_type;
01430 public:
01431 bool operator()(const value_type& left, const value_type& right) const
01432 {return (comp(left.first, right.first)); }
01433 protected:
01434 value_compare(const key_compare &pr) : comp(pr) {}
01435 key_compare comp;
01436 };
01437
01438 private:
01439 R rng;
01440 key_compare KeyCompare;
01441 value_compare ValueCompare;
01442 unsigned int maxLevel;
01443 unsigned int level;
01444 node_type *head;
01445 node_type *tail;
01446 double probability;
01447 size_type items;
01448 mutable size_type scan_index;
01449 mutable std::pair<size_type,node_type*> *update;
01450
01452
01456 void Init(double probability,unsigned int maxLevel) {}
01457
01459
01464 node_type* Alloc(unsigned int level, const T &obj) {}
01465
01467
01471 node_type* Alloc(unsigned int level) {}
01472
01474
01477 void Free(node_type *item) {}
01478
01480
01483 unsigned int GenerateRandomLevel() const {}
01484
01486 void adjust_levels() {}
01487
01489
01495 void scan(const key_type &val) const{}
01496
01498
01504 void scan(const value_type &val) const{}
01505
01507
01513 void scan(size_type index) const{}
01514
01516
01522 void scan(const node_type *nodex) const{}
01523
01525
01532 void scan(const iterator &where) const{}
01533
01534 public:
01536
01539 class T0 : public std::iterator<std::random_access_iterator_tag, value_type>
01540 {
01541 public:
01542 typedef std::iterator<std::random_access_iterator_tag, value_type> baseclass;
01543 typedef std::random_acces_iterator_tag iterator_category;
01544 typedef typename baseclass::value_type value_type;
01545 typedef typename baseclass::value_type* pointer;
01546 typedef typename baseclass::value_type& reference;
01547 typedef ptrdiff_t difference_type;
01548
01549 friend T1;
01550 friend container_type;
01551 private:
01552 container_type *container;
01553 mutable size_type Findex;
01554 node_type* node;
01555 public:
01557 T0() {}
01558
01560
01563 T0(const T0 &t0){}
01564
01566
01569 T0(const T1 &t1){}
01570
01572
01578 T0(container_type *container, node_type* p){}
01579
01581
01586 T0(container_type *container, node_type* p, size_type index){}
01587
01589
01592 bool operator==(const T0& other) const{}
01593
01595
01598 bool operator!=(const T0& other) const{}
01599
01601
01604 bool operator==(const T1& other) const{}
01605
01607
01610 bool operator!=(const T1& other) const{}
01611
01613
01618 T0& operator++(){}
01619
01621
01626 T0 operator++(int){}
01627
01629
01634 T0& operator--(){}
01635
01637
01642 T0 operator--(int){}
01643
01645
01650 reference operator*() const{}
01651
01653
01658 pointer operator->() const{}
01659
01661
01664 bool operator<(const T0 &other) const{}
01665
01667
01670 bool operator<=(const T0 &other) const{}
01671
01673
01676 bool operator>(const T0 &other) const{}
01677
01679
01682 bool operator>=(const T0 &other) const{}
01683
01685
01688 bool operator<(const T1 &other) const{}
01689
01691
01694 bool operator<=(const T1 &other) const{}
01695
01697
01700 bool operator>(const T1 &other) const{}
01701
01703
01706 bool operator>=(const T1 &other) const{}
01707
01709
01713 T0 operator+(difference_type off) const{}
01714
01716
01720 T0 operator-(difference_type off) const{}
01721
01723
01727 T0& operator+=(difference_type off){}
01728
01730
01734 T0& operator-=(difference_type off){}
01735
01737
01741 difference_type operator-(const T0 &other) const{}
01742
01744
01748 difference_type operator-(const T1 &other) const{}
01749
01751
01757 int refresh(){}
01758
01760
01764 value_type& operator[](difference_type off) const{}
01765
01767
01770 size_type getIndex() const{}
01771 };
01772
01774
01777 class T1 : public std::iterator<std::random_access_iterator_tag, value_type, ptrdiff_t, const value_type*, const value_type&>
01778 {
01779 public:
01780 typedef std::iterator<std::random_access_iterator_tag, value_type> baseclass;
01781 typedef std::random_acces_iterator_tag iterator_category;
01782 typedef typename baseclass::value_type value_type;
01783 typedef typename const baseclass::value_type* pointer;
01784 typedef typename const baseclass::value_type& reference;
01785 typedef ptrdiff_t difference_type;
01786
01787 friend T0;
01788 friend container_type;
01789 private:
01790 const container_type *container;
01791 mutable size_type Findex;
01792 const node_type* node;
01793 public:
01795 T1() {}
01796
01798
01801 T1(const T1 &t1){}
01802
01804
01807 T1(const T0 &t0){}
01808
01810
01816 T1(container_type *container, node_type* p){}
01817
01819
01824 T1(container_type *container, node_type* p, size_type index){}
01825
01827
01830 bool operator==(const T0& other) const{}
01831
01833
01836 bool operator!=(const T0& other) const{}
01837
01839
01842 bool operator==(const T1& other) const{}
01843
01845
01848 bool operator!=(const T1& other) const{}
01849
01851
01856 T1& operator++(){}
01857
01859
01864 T1 operator++(int){}
01865
01867
01872 T1& operator--(){}
01873
01875
01880 T1 operator--(int){}
01881
01883
01888 reference operator*() const{}
01889
01891
01896 pointer operator->() const{}
01897
01899
01902 bool operator<(const T0 &other) const{}
01903
01905
01908 bool operator<=(const T0 &other) const{}
01909
01911
01914 bool operator>(const T0 &other) const{}
01915
01917
01920 bool operator>=(const T0 &other) const{}
01921
01923
01926 bool operator<(const T1 &other) const{}
01927
01929
01932 bool operator<=(const T1 &other) const{}
01933
01935
01938 bool operator>(const T1 &other) const{}
01939
01941
01944 bool operator>=(const T1 &other) const{}
01945
01947
01951 T1 operator+(difference_type off) const{}
01952
01954
01958 T1 operator-(difference_type off) const{}
01959
01961
01965 T1& operator+=(difference_type off){}
01966
01968
01972 T1& operator-=(difference_type off){}
01973
01975
01979 difference_type operator-(const T0 &other) const{}
01980
01982
01986 difference_type operator-(const T1 &other) const{}
01987
01989
01995 int refresh(){}
01996
01998
02002 value_type& operator[](difference_type off) const{}
02003
02005
02008 size_type getIndex() const{}
02009
02010 };
02011
02012
02014
02018 MultiAutoKeyedSSkipList(){}
02019
02021
02027 explicit MultiAutoKeyedSSkipList(size_type maxNodes){}
02028
02030
02034 MultiAutoKeyedSSkipList(double probability, unsigned int maxLevel){}
02035
02037
02042 MultiAutoKeyedSSkipList(const container_type &source){}
02043
02045
02052 template<class InIt> MultiAutoKeyedSSkipList(InIt first, InIt last){}
02053
02055
02061 template<class InIt> MultiAutoKeyedSSkipList(InIt first, InIt last, double probability, unsigned int maxLevel){}
02062
02064
02072 template<class InIt> MultiAutoKeyedSSkipList(InIt first, InIt last, size_type maxNodes){}
02073
02075
02081 explicit MultiAutoKeyedSSkipList(const key_compare& comp){}
02082
02084
02092 template<class InIt> MultiAutoKeyedSSkipList(InIt first, InIt last, const key_compare& comp){}
02093
02095
02102 template<class InIt> MultiAutoKeyedSSkipList(InIt first, InIt last, const key_compare& comp, double probability, unsigned int maxLevel){}
02103
02105
02114 template<class InIt> MultiAutoKeyedSSkipList(InIt first, InIt last, const key_compare& comp, size_type maxNodes) : Compare(comp){}
02115
02117
02120 ~MultiAutoKeyedSSkipList(){}
02121
02122
02124
02130 container_type& operator=(const container_type &source){}
02131
02133
02136 iterator begin(){}
02137
02139
02142 iterator end(){}
02143
02145
02148 const_iterator begin() const{}
02149
02151
02154 const_iterator end() const{}
02155
02157
02160 reverse_iterator rbegin(){}
02161
02163
02166 reverse_iterator rend(){}
02167
02169
02172 const_reverse_iterator rbegin() const{}
02173
02175
02178 const_reverse_iterator rend() const{}
02179
02181
02184 size_type size() const{}
02185
02187
02190 bool empty() const{}
02191
02193
02196 reference front(){}
02197
02199
02202 const_reference front() const{}
02203
02205
02208 reference back(){}
02209
02211
02214 const_reference back() const{}
02215
02217 void pop_front(){}
02218
02220 void destroy_front(){}
02221
02223 void pop_back(){}
02224
02226 void destroy_back(){}
02227
02229
02233 template<class InIt> void assign(InIt first, InIt last){}
02234
02236
02240 iterator insert(const value_type& val){}
02241
02243
02249 iterator insert(const iterator &where, const value_type& val) {}
02250
02252
02256 template<class InIt> void insert(InIt first, InIt last) {}
02257
02259 void clear(){}
02260
02262 void destroy(){}
02263
02265 iterator erase(const iterator &where){}
02266
02268 iterator destroy(const iterator &where){}
02269
02271
02278 iterator erase(const iterator &first, const iterator &last){}
02279
02281
02288 iterator destroy(const iterator &first, const iterator &last){}
02289
02291
02295 size_type erase(const key_type &keyval){}
02296
02298
02302 size_type destroy(const key_type &keyval){}
02303
02305
02309 iterator erase_index(size_type index);
02310
02312
02316 iterator destroy_index(size_type index);
02317
02319
02322 void swap(container_type& right) {}
02323
02325
02328 template<class Pr1> void erase_if(Pr1 pred);
02329
02331
02334 template<class Pr4> void destroy_if(Pr4 pred);
02335
02337
02348 void cut(const iterator &first, const iterator &last, container_type& right);
02349
02351
02357 mapped_type_reference operator[](size_type index){}
02358
02360
02366 const_mapped_type_reference operator[](size_type index) const{}
02367
02369
02375 mapped_type_reference at(size_type off){}
02376
02378
02384 const_mapped_type_reference at(size_type off) const{}
02385
02387 key_compare key_comp() const { }
02388
02390 value_compare value_comp() const { }
02391
02393 size_type max_size() const{}
02394
02396
02402 const key_type& key(const value_type& value) const {}
02403
02405
02411 mapped_type& value(value_type& value) {}
02412
02414
02418 iterator find(const key_type& keyval) {}
02419
02421
02425 const_iterator find(const key_type& keyval) const {}
02426
02428
02432 size_type count(const key_type& keyval) const {}
02433
02434
02436
02440 iterator lower_bound(const key_type& keyval) {}
02441
02443
02447 const_iterator lower_bound(const key_type& keyval) const {}
02448
02450
02454 iterator upper_bound(const key_type& keyval) {}
02455
02457
02461 const_iterator upper_bound(const key_type& keyval) const {}
02462
02464
02468 ipair equal_range(const key_type& keyval) {}
02469
02471
02475 const_ipair equal_range(const key_type& keyval) const {}
02476 };
02477
02479
02484 template <class K, class T, class Pr, class R>
02485 bool operator==(const MultiAutoKeyedSSkipList<K,T,Pr,R> &left, const MultiAutoKeyedSSkipList<K,T,Pr,R> &right)
02486 {
02487 return ((left.size() == right.size()) &&
02488 (std::equal(left.begin(), left.end(), right.begin())));
02489 }
02490
02492
02497 template <class K, class T, class Pr, class R>
02498 bool operator!=(const MultiAutoKeyedSSkipList<K,T,Pr,R> &left, const MultiAutoKeyedSSkipList<K,T,Pr,R> &right)
02499 {
02500 return !(left==right);
02501 }
02502
02504
02509 template <class K, class T, class Pr, class R>
02510 bool operator<(const MultiAutoKeyedSSkipList<K,T,Pr,R> &left, const MultiAutoKeyedSSkipList<K,T,Pr,R> &right)
02511 {
02512 return lexicographical_compare(left.begin(),left.end(),right.begin(),right.end(),left.value_comp());
02513 }
02514
02516
02521 template <class K, class T, class Pr, class R>
02522 bool operator<=(const MultiAutoKeyedSSkipList<K,T,Pr,R> &left, const MultiAutoKeyedSSkipList<K,T,Pr,R> &right)
02523 {
02524 return !(right < left);
02525 }
02526
02528
02533 template <class K, class T, class Pr, class R>
02534 bool operator>(const MultiAutoKeyedSSkipList<K,T,Pr,R> &left, const MultiAutoKeyedSSkipList<K,T,Pr,R> &right)
02535 {
02536 return (right < left);
02537 }
02538
02540
02545 template <class K, class T, class Pr, class R>
02546 bool operator>=(const MultiAutoKeyedSSkipList<K,T,Pr,R> &left, const MultiAutoKeyedSSkipList<K,T,Pr,R> &right)
02547 {
02548 return !(left < right);
02549 }
02550
02551
02552
02553
02554
02555
02556
02557