SourceForge.jp

dkutilMap.h

説明を見る。
00001 
00007 #ifndef _dkutilMap__h_
00008 #define _dkutilMap__h_
00009 
00010 #include "dKingyoMacro.h"
00011 #include <dkutil/include/dkutilSTLPortPolicy.h>
00012 #include <dkutil/include/dkutilSTLInclude.h>
00013 
00014 namespace dkutil{
00015 #ifdef m
00016 #   undef m
00017 #endif
00018 
00025 template<class K,class V,class MAP_TYPE=std::map<K,V> >
00026 class map_ex{
00027 public:
00028 #ifdef _MSC_VER
00029     typedef MAP_TYPE CONTAINER_TYPE;
00030 #else
00031     typedef std::map<K,V> CONTAINER_TYPE;
00032 #endif
00033     typedef std::pair<K,V> DATA_TYPE;
00034     typedef std::pair<CONTAINER_TYPE::iterator,bool> RESULT;
00035     //typedef std::pair<bool,void *> GET_DATA;
00036     typedef CONTAINER_TYPE::iterator iterator;
00037     typedef CONTAINER_TYPE::const_iterator const_iterator;
00038     typedef CONTAINER_TYPE::reverse_iterator reverse_iterator;
00039     typedef CONTAINER_TYPE::const_reverse_iterator const_reverse_iterator;
00040 protected:
00041 
00042     CONTAINER_TYPE m;//map
00043     
00044 public:
00045 
00046 
00047     iterator begin(){return m.begin();}
00048     iterator end(){return m.end();}
00049     const_iterator begin()const{return m.begin();}
00050     const_iterator end()const{return m.end();}
00051     //reverse_iterator rbegin(){return m.rbegin();}
00052     //reverse_iterator rend(){return m.rend();}
00053     //const_reverse_iterator rbegin()const{return m.rbegin();}
00054     //const_reverse_iterator rend()const{return m.rend();}
00055     void clear(){m.clear();}
00056     void erase(K key){m.erase(key);}
00057     void erase(iterator it){m.erase(it);}
00058     iterator find(K key){return m.find(key);}
00059     const_iterator find(K key)const{return m.find(key);}
00060     bool empty()const{return m.empty();}
00061     RESULT insert(DATA_TYPE &d){
00062         return m.insert(d);
00063     }
00064     bool isInserted(RESULT &r){
00065         return r.second;
00066     }
00068     bool rb_insert(DATA_TYPE &d){
00069         return isInserted(insert(d));
00070     }
00071     map_ex(){}
00072     virtual ~map_ex(){}
00078 
00079     V &GetData(K &key){
00080         iterator it = m.find(key);
00081         if(it==m.end()){
00082             throw std::invalid_argument("keyが無効です。");//だめだめよ!
00083         }
00084         return (*it).second;
00085     }
00086     bool GetData(K &key,V **data){
00087         iterator it = m.find(key);
00088         if(it==m.end()){
00089             data = NULL;
00090             return false;
00091         }
00092         *data = &((*it).second);
00093         return true;
00094     }
00095     V &GetData(K &key)const{
00096         const_iterator it = m.find(key);
00097         if(it==m.end()){
00098             throw std::invalid_argument("keyが無効です。");//だめだめよ!
00099         }
00100         return (*it).second;
00101     }
00102     bool GetData(K &key,V **data)const{
00103         const_iterator it = m.find(key);
00104         if(it==m.end()){
00105             data = NULL;
00106             return false;
00107         }
00108         *data = const_cast<V *>(&((*it).second));
00109         return true;
00110     }
00116 
00117     bool SetData(K &key,V &value){
00118         RESULT result;
00119         DATA_TYPE data(key,value);
00120         result=m.insert(data);
00121         return result.second;
00122     }
00128 
00129     bool DeleteDataByKey(K &key){
00130         iterator it = m.find(key);
00131         if(it == m.end())
00132             return false;
00133         m.erase(it);
00134         return true;
00135     }
00140 
00141     bool DeleteDataByValue(V &value){
00142         iterator it=m.begin();
00143         while(it!=m.end()){
00144             if(value==(*it).second){
00145                 m.erase(it);//これでいいんかいな!?だれかhash_mapの関数リファレンスおしえてーな
00146                 return true;
00147             }
00148             it++;
00149         }
00150         return false;
00151     }
00152     
00153 };
00154 
00155 }//end of dkutil namespace
00156 
00157 
00158 #endif//end of include once
00159 

dkutil 1.02リリース前 d金魚専用マニュアルバージョンに対してSun Dec 28 21:23:08 2003に生成されました。 doxygen 1.3.5