扩容的大逻辑跟前面一样。但是需要注意,vector里面每个位置存的是一个一个的桶,当swap后,newHT出了作用域就会调用析构,此时只会销毁每个位置,而不会销毁每个桶,所以需要我们自己写出析构函数。 上面的扩容方式,new了多少个节点,就得销毁多少个节点,所以不太好,下面是另一种方式: 重新开一个vector,将旧表里的...
#include <iostream> #include <unordered_set> #include <vector> using namespace std; int main() { vector<int vec = {1, 2, 3, 4, 5}; unordered_set<int> mySet(vec.begin(), vec.end()); // 从 vector 初始化 for (const auto& elem : mySet) { cout << elem << " "; // 输...
T存储键值对 class HashTable { public: typedef HashNode<T> Node;//传入键值对 Node* Find(const K& key);//查找函数,只传键 pair<Node*,bool> Insert(const T& data);//插入,传入T bool Erase(const K& key);//删除,只传键 private: vector<Node*> _tables; size_t _n;//记录存储数据个数...
124 -- 18:13 App c++STL 类型转换 unordered_set to vector 学习 日常 记录 20 -- 20:06 App c++ STL reserve() 学习 音乐 日常 记录 笔记 101 -- 16:00 App c++STL unordered_set insert 学习 音乐 日常 107 -- 32:14 App c++ STL unordered_set bucket_size 学习 音乐 日常 记录 97 -...
vector<HashData<K, V>> _tables; size_t _n = 0; // 表中存储数据个数 }; 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 要注意的是这⾥需要给每个存储值的位置加⼀个状态标识,否则删除⼀些值以后,会影响后⾯冲突的值的查找。如下图,我们删除...
#pragmaonce#include<iostream>#include<vector>namespaceMySTL{template<classK,classT,classHash,classKeyofT>classHashBucket{typedefHashNode<T>Node;private:std::vector<Node*>_Bucket;size_t _n;};} 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ...
按照哈希函数:Hash(key) = key% p(p<=m),将关键码转换成哈希地址,一般不这么干,最常用的就是拿vector.size()作为除数,每次扩容将vector.size()扩容二倍。但后面开散列的解决方式那里,我们会仿照库,用质数的集合作为vector.size(),然后用其作为除数。
就是整个哈希表重建。这个过程有点类似向vector里不断添加元素,vector会resize。比如你新建一个vector时,它可能只申请了一块最多保存10个元素的内存,当你插入第11个元素的时候,它会自动重新申请一块更大空间,比如能存下20个元素。哈希表也是类似,不过rehash不会频繁发生,均摊复杂度还是O(1)的,也不用太担心...
() * 2;vector<Node*> newTable(newSize, nullptr);for (int i = 0; i < _table.size(); i++){Node* cur = _table[i];while (cur){Node* next = cur->_next;size_t hashi = hf(cur->_kv.first) % newTable.size();cur->_next = newTable[hashi];newTable[hashi] = cur;cur = ...
直接返回方法规定的值即可 * * * @param operations string字符串vector * @param args int整型vector<vector<>> * @return string字符串vector */ vector<string> manageCows(vector<string>& operations, vector<vector<int> >& args) { // write code here vector<string> ret; CowHashSet cow; for(...