#ifndef CCMAP_H #define CCMAP_H #include #include "CCArrayList.h" #include "CCList.h" #include "CCVector.h" #include "map" template class CCMap:public std::map { std::mutex mutex_s; public: using std::map::map; CCMap(std::map map) { this->insert(map.begin(),map.end()); } CCMap(const std::map& map) { this->insert(map.begin(),map.end()); } CCMap(const CCMap& map) { this->insert(map.begin(),map.end()); } CCList values() { CCList list; for(auto it=this->begin();it!=this->end();++it) { list.add(it->second); } return list; } CCVector valuesVector() { CCVector vector; for(auto it=this->begin();it!=this->end();++it) { vector.add(it->second); } return vector; } CTL::ArrayList valuesArrayList() { CTL::ArrayList arrayList; for(auto it=this->begin();it!=this->end();++it) { arrayList.add(it->second); } return arrayList; } /** * 有锁的添加键值对 * @param key 键 * @param value 值 */ void put_lock(K key,V value) { mutex_s.lock(); this->insert(std::pair(key,value)); mutex_s.unlock(); } /** * 有锁的修改键值对 * @param key 键 * @param value 值 */ void replace_lock(K key,V value) { mutex_s.lock(); this->at(key) = value; mutex_s.unlock(); } /** * 有锁的删除键值对 * @param key 键 */ void remove_lock(K key) { mutex_s.lock(); this->erase(key); mutex_s.unlock(); } /** * @param key 键 * @return 值 */ V get(K key) { std::unique_lock lock(mutex_s); return this->at(key); } bool IsEmpty() { std::unique_lock lock(mutex_s); return this->empty(); } operator std::map() { return *this; } CCMap operator = (const std::map& map) { this->clear(); this->insert(map.begin(),map.end()); return *this; } CCMap operator = (const CCMap& map) { this->clear(); this->insert(map.begin(),map.end()); return *this; } CCMap operator = (const CCMap* map) { this->clear(); this->insert(map->begin(),map->end()); return *this; } bool exist(K key) { std::unique_lock lock(mutex_s); return this->find(key) != this->end(); } }; #endif