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