⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 myhashmap.h

📁 hoard内存管理器
💻 H
字号:
// -*- C++ -*-#ifndef _HL_MYHASHMAP_H_#define _HL_MYHASHMAP_H_#include <assert.h>#include "hash.h"namespace HL {template <typename Key,	  typename Value,	  class Allocator>class MyHashMap {public:  MyHashMap (int size = INITIAL_NUM_BINS)    : num_bins (size)  {    bins = new (alloc.malloc (sizeof(ListNodePtr) * num_bins)) ListNodePtr;    for (int i = 0 ; i < num_bins; i++) {      bins[i] = NULL;    }  }  void set (Key k, Value v) {    int binIndex = (unsigned int) hash(k) % num_bins;    ListNode * l = bins[binIndex];    while (l != NULL) {      if (l->key == k) {	l->value = v;	return;      }      l = l->next;    }    // Didn't find it.    insert (k, v);  }  Value get (Key k) {    int binIndex = (unsigned int) hash(k) % num_bins;    ListNode * l = bins[binIndex];    while (l != NULL) {      if (l->key == k) {	return l->value;      }      l = l->next;    }    // Didn't find it.    return 0;  }  void erase (Key k) {    int binIndex = (unsigned int) hash(k) % num_bins;    ListNode * curr = bins[binIndex];    ListNode * prev = NULL;    while (curr != NULL) {      if (curr->key == k) {	// Found it.	if (curr != bins[binIndex]) {	  assert (prev->next == curr);	  prev->next = prev->next->next;	  alloc.free (curr);	} else {	  ListNode * n = bins[binIndex]->next;	  alloc.free (bins[binIndex]);	  bins[binIndex] = n;	}	return;      }      prev = curr;      curr = curr->next;    }  }private:  void insert (Key k, Value v) {    int binIndex = (unsigned int) hash(k) % num_bins;    ListNode * l = new (alloc.malloc (sizeof(ListNode))) ListNode;    l->key = k;    l->value = v;    l->next = bins[binIndex];    bins[binIndex] = l;  }  enum { INITIAL_NUM_BINS = 511 };  class ListNode {  public:    ListNode (void)      : next (NULL)    {}    Key key;    Value value;    ListNode * next;  };  int num_bins;  typedef ListNode * ListNodePtr;  ListNodePtr * bins;  Allocator alloc;};};#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -