首页 > 解决方案 > 使用地图的迭代器返回一个指针映射*

问题描述

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

任务是实现一个大小为 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 年大学数据结构作业的迂腐性质。

附言。如果您认为有更好的库可以作为我的哈希表的基础,请告诉我。链接列表可能吗?

标签: c++c++11pointersdata-structures

解决方案


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

std::vector是你的朋友。如果您准备好 ASCII 表,您应该能够制定一个好的散列函数:hash(val) -> Index.

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

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

编辑附录:

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


推荐阅读