ACM模板库

ACM模板库


手写hash(int对int)

<pre><code class="language-cpp">#include &lt;iostream&gt; #include &lt;cstring&gt; #include &lt;algorithm&gt; using namespace std; namespace Hash{ struct Line{int u, v, next;}e[1000000]; const int HashMod=100007; int h[HashMod], cnt; inline int Add(int u, int v, int w){e[++cnt] = (Line){w, v, h[u]}; h[u] = cnt;return v;} inline void clear(){memset(h, 0, sizeof(h)); cnt = 0;} inline void insert(int x, int k = 0){//插入新的映射对 int s = x % HashMod; Add(s, k, x); } void updata(int x, int k = 0){//修改映射值 int s = x % HashMod; for(int i = h[s]; i; i = e[i].next) if(e[i].u == x){ e[i].v = k; return; } Add(s, k, x); } inline int query(int x){//查询映射值 int s = x % HashMod; for(int i = h[s]; i; i = e[i].next) if(e[i].u == x) return e[i].v; return 0; } inline int count(int x){//判断是否存在映射的键值 int s = x % HashMod; for(int i = h[s]; i; i = e[i].next) if(e[i].u == x) return 1; return 0; } inline int add(int x)//映射值自加1 { int s = x % HashMod; for(int i = h[s]; i; i = e[i].next) if(e[i].u == x) return e[i].v = e[i].v + 1; return Add(s, 1, x); } inline int sub(int x)//映射值自减1 { int s = x % HashMod; for(int i = h[s]; i; i = e[i].next) if(e[i].u == x) return e[i].v = e[i].v - 1; return Add(s, -1, x); } }</code></pre>

页面列表

ITEM_HTML