使用 map<char,strring> 的迭代器返回指针 map<char,strring>*

using an iterator of a map<char,strring> to return a pointer map<char,strring>*

本文关键字:gt strring char lt map 指针 返回 使用 迭代器      更新时间:2023-10-16

我正在做大学作业,因此我的问题很迂腐。

分配是实现大小为 26 的哈希表。哈希函数只是单词 {hash(apple) = e, hash(car) = r} 的最后一个字母。我选择对字母表的每个字母(哈希(和字符串使用map<char, string>字符来存储输入单词(键(。

我想搜索地图并返回一个指向需要添加新键的位置的指针。我工作的搜索方面是我遇到问题的指针。任何协助将不胜感激。

map<char,string>* search(map<char,string>* hashTable, string key, char hashVal){
map<char,string>::iterator it;
for(it = hashTable->begin(); it != hashTable->end(); ++it){
if(I want to return this address of hashTable){
return &it->hashTable || something to that effect 
}
}
)

我想这样做的原因是在 add(( 或 remove(( 中满足以下用例。

void remove||add(map<char,string>* hashTable, string key){
map<char, string>* temp = search(hashTable, key, hashVal);
temp->second == NULL||key;
}

注意: 我知道地图库具有 at(( 和 find(( 等函数,但使用它们并不能证明我对哈希表的理解。这是我所指的2020年大学数据结构作业的迂腐性质。

如果您认为有更好的库可以基于我的哈希表,请告诉我。 也许是链表?

好的,所以我认为你以错误的方式攻击它。std::map已经是一个成熟的、类似哈希表的容器(畏缩,是的,我知道它不是真的,不要伤害我!使用它很可能会使您误入歧途,而您应该从本练习中学到什么。

std::vector是你的朋友。 如果你已经准备好了ASCII表,你应该能够制定一个好的哈希函数:hash(val) -> Index

这个例子可能会让你觉得是学究式的定义,但它会使哈希表的所有属性都非常明显(就像在你的脸上一样(。

啊,回答你的问题:std::next 有一个很好的重载,可以让一个指针/迭代器指向一个元素。

编辑附录:

(提示(哈希表的杀手级功能在使用链表时可能会丢失......