c++ - 使用地图的迭代器返回一个指针映射*
问题描述
我正在从事大学作业,因此我的问题很迂腐。
任务是实现一个大小为 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 有一个很好的重载来获取指向元素的指针/迭代器。
编辑附录:
(提示)使用链表时,哈希表的杀手级功能可能会丢失......
推荐阅读
- visual-studio - 如何在 Visual Studio 解决方案扩展中枚举项目/文件?
- python - 如何将`pandas`中`DataFrame`的`unstack`方法反转回原始对象?
- java - Linux 服务器的 SSL 握手失败,但 Windows 没有
- c# - 如何在 StackPanel 中使用 DateTime 字符串格式?
- azure-service-fabric - 如何处理 Reliable Actors 或有状态的 Reliable Service 中的长期操作以及“重新处理”失败状态
- javascript - 没有反应路由器的反应隐藏组件
- asp.net-mvc - @Html.Actionlink 添加类时更改控制器的链接
- javascript - Cat 未被识别为内部或外部命令
- python - 如何从特定时间运行 Python 脚本
- reactjs - 前端 (ReactJS) 到后端 (NodeJS) 身份验证