我撰写了一份基本方案,其中将独一无二的病例列入“扼杀和gt”地图。
我使用的是:t:tr1::unordered_map for the ratification, modeld for atomh function and atom equality function。 关键类型实际上是<代码>char*。 http://www.ohchr.org。
然后,我修改了同一法典,以使用一个非常简便的散列表(即由散列的{钥匙,价值}结构,以斜体为指数),其大小和线性碰撞探测力最高。 该方案的速率达到33%。
鉴于我使用tr1:无顺序 我把草原表推上,它从未增长过,而且我正在使用同样的 has和比较常规,什么是tr的:没有顺序——做的地图比最根本的 has地图少50%?
Code for the hash map type I m talking about as "simple" here:
typedef struct dataitem {
char* item;
size_t count;
} dataitem_t;
dataitem_t hashtable[HASHTABLE_SIZE] = {{NULL,0}}; // Start off with empty table
void insert(char* item) {
size_t hash = generate_hash(item);
size_t firsthash = hash;
while (true) {
hash &= HASHTABLE_SIZE_MASK; // Bitmasking effect is hash %= HASHTABLE_SIZE
if (hashtable[hash].item == NULL) { // Free bucket
hashtable[hash].item = item;
hashtable[hash].count = 1;
break;
}
if (strcmp(hashtable[hash].item, item) == 0) { // Not hash collision; same item
hashtable[hash].count += 1;
break;
}
hash++; // Hash collision. Move to next bucket (linear probing)
if (hash == firsthash) {
// Table is full. This does not happen because the presizing is correct.
exit(1);
}
}
}