6 #ifndef _DUPLICATEDHASHTABLE_HPP_ 
    7 #define _DUPLICATEDHASHTABLE_HPP_ 
   13 #include <unordered_map> 
   22 template<
typename Key, 
typename Tp,
 
   23     typename Hash = hash<Key>,
 
   24     typename _SubKey=
size_t 
   33     innerStore(Tp tps0, _SubKey sk0) {
 
   45   unordered_map<Key, std::vector<innerStore>, Hash > map;
 
   48     map = unordered_map<Key, std::vector<innerStore> >();
 
   52   bool empty() 
const noexcept { 
return map.empty(); }
 
   54   size_t emplace(Key key, Tp value) {
 
   55     if (map.find(key) == map.end()) {
 
   56       std::vector<innerStore> vecKey = std::vector<innerStore>();
 
   57       vecKey.push_back(innerStore(value));
 
   58       map.emplace(key, vecKey);
 
   62       map.find(key)->second.push_back(innerStore(value));
 
   63       return map.find(key)->second.size() - 1;
 
   67   size_t emplace(Key key, Tp value, _SubKey sk) {
 
   68     auto findru = map.find(key);
 
   69     if (findru == map.end()) {
 
   70       std::vector<innerStore> vecKey = std::vector<innerStore>();
 
   71       vecKey.push_back(innerStore(value, sk));
 
   72       map.emplace(key, vecKey);
 
   76       findru->second.push_back(innerStore(value, sk));
 
   77       return findru->second.size() - 1;
 
   95     return map.erase(key);
 
   98   bool eraseWithSubKey(Key key, _SubKey sk) {  
 
   99     auto k = map.find(key);
 
  100     if (k == map.end()) {
 
  103     if (k->second.size() == 1) {
 
  107     auto iter = k->second.begin();
 
  108     while (iter != k->second.end()) {
 
  109       if (iter->sk == sk) {
 
  110         iter = k->second.erase(iter);
 
  115     if (k->second.size() == 0) {
 
  120   bool erase(Key key, 
size_t duplication) {
 
  121     auto k = map.find(key);
 
  122     if (k == map.end()) {
 
  125     if (k->second.size() < duplication + 1) {
 
  126       cout << 
"error:" << k->second.size() << 
":" << (duplication + 1) << endl;
 
  129     if (k->second.size() == 1) {
 
  133     k->second.erase(k->second.begin() + duplication);
 
  138   bool erase(Key key, 
size_t duplicationS, 
size_t duplicationE) {
 
  139     auto k = map.find(key);
 
  140     if (duplicationS > duplicationE) {
 
  143     if (k == map.end()) {
 
  146     if (k->second.size() < duplicationE + 1) {
 
  149     k->second.erase(k->second.begin() + duplicationS, k->second.begin() + duplicationE + 1);
 
  151     if (k->second.size() == 0) {
 
Definition: DupicatedHashTable.hpp:27
 
Definition: DatasetTool.h:10