如何实现此伪代码?

时间:2019-12-11 17:49:18

标签: c++ hashmap pseudocode

我正在尝试编写一个将字符串散列为整数的函数,以便可以将字符串用作散列图中的键。我必须使用下面编写的伪代码,但仍然无法正确使用它。 该程序将输入德语单词(作为关键字)并返回其英语翻译(作为值)。

伪代码:

Parameters : natural numbers i, h = 0; Field s
 for i = 0 to i <length_of (s)
    h = (h * 128 + s [i]) mod M;
Result : h.

我的代码:

#include "pch.h"
#include <iostream>
#include <string>
#define M 661
using namespace std;

struct entry {
    string key_de, val_en;
};

int HASH(int i, int h = 0, struct entry ex_array[])
{
    for (i = 0; i < sizeof(ex_array) / sizeof(ex_array[0]); i++)
    {
        h = (h * 128) + ex_array[i] % m;
    }
    return h;
}

int main()
{

}

1 个答案:

答案 0 :(得分:0)

这将是您实现该目标的一种方式

#include <string>
#define M 661

int Hash(std::string s, int h = 0){
   for(int i = 0 ; i < s.length(); i++)
      h = (h * 128 + s [i]) % M;
   return h;
}

不过我有一个音符。在您提供的伪代码中,我不确定所提供的“参数”是否在谈论实际的函数参数,因为传入“ i”似乎有些奇怪,因为您立即将其设置为0(对于i = 0)。 ..)。但是,如果确实需要传递“ i”,则可以将其添加到参数列表的开头,然后从for循环中删除“ int”。

然后,您可以使用此函数获取德语单词的哈希值。

下面是使用方法的示例

string arr[M]; //assuming M is size of array
std::string germanWord{"german"}; //some German word
std::string englishWord{"english"} //same word but in English
arr[Hash(germanWord)] = englishWord //adding new English word to the array
string s = arr[Hash(germanWord)] // accessing that word from the array

如果要创建实际的哈希映射(例如如何处理冲突),还可能需要考虑其他事项,但是如果您只想实现该伪代码,这就足够了。

祝你好运!