00001 00024 #ifndef ARRAYSET_H_ 00025 #define ARRAYSET_H_ 00026 #include <vector> 00027 #include <algorithm> 00028 using namespace std; 00029 template<typename T> 00030 class ArraySet{ 00031 public: 00032 ArraySet(){ 00033 setsize= 0; 00034 } 00035 ArraySet(int maxSize, int (*mapToInt)(T)):indexes(maxSize){ 00036 this->mapToInt = mapToInt; 00037 fill(indexes.begin(), indexes.end(), -1); 00038 setsize = 0; 00039 } 00040 typedef typename vector<T>::iterator iterator; 00041 iterator begin(){ 00042 return setElements.begin(); 00043 } 00044 iterator end(){ 00045 return setElements.end(); 00046 } 00047 bool insert(T ele){ 00048 int index = (*mapToInt)(ele); 00049 if(indexes[index]==-1){ 00050 setsize++; 00051 indexes[index] = setElements.size(); 00052 setElements.push_back(ele); 00053 return true; 00054 } 00055 return false; 00056 } 00057 bool erase(T ele){ 00058 int index = (*mapToInt)(ele); 00059 if(indexes[index]!=-1){ 00060 setsize--; 00061 int indexEle = indexes[index]; 00062 //swap(setElements[indexEle], setElements[setElements.size()-1]); 00063 setElements[indexEle] = setElements[setElements.size()-1]; 00064 setElements.pop_back(); 00065 indexes[(*mapToInt)(setElements[indexEle])] = indexEle; 00066 indexes[index] = -1; 00067 return true; 00068 } 00069 return false; 00070 } 00071 00072 void clear(){ 00073 fill(indexes.begin(), indexes.end(), -1); 00074 setElements.clear(); 00075 setsize = 0; 00076 } 00077 00078 int size(){ 00079 // return setElements.size(); 00080 return setsize; 00081 } 00082 00083 private: 00084 vector<int> indexes; 00085 vector<T> setElements; 00086 int (*mapToInt)(T); 00087 int setsize; 00088 }; 00089 00090 #endif /* ARRAYSET_H_ */