c++ - 我如何实现这个伪代码?
问题描述
我正在尝试编写一个将字符串散列为整数的函数,这样我就可以在我的散列图中使用字符串作为键。我需要使用下面编写的伪代码,但我仍然无法让它在没有错误的情况下工作。该程序是输入一个德语单词(作为键)并返回它的英文翻译(作为值)。
伪代码:
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()
{
}
解决方案
这将是您可以实现的一种方式
#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
如果你要制作一个实际的哈希映射(比如你如何处理冲突),你可能还需要考虑其他一些事情,但如果你只是想实现那个伪代码,这就足够了。
祝你好运!
推荐阅读
- python - PyTorch nn.CrossEntropyLoss 运行时维度超出范围错误
- python - 证明在给定 C 的情况下 A 和 B 是条件独立的
- html - 单击图像时隐藏 div 并显示另一个
- django - 如何创建具有 2 个外键的好友对象?
- apache-kafka - 使用 Spring Cloud streamng 无法在 Kafka Ktable 中看到任何消息
- markdown - 在 R Markdown 中转义正斜杠
- reactjs - 如何通过反应钩子在功能组件中使用componentWillUpdate?
- laravel - 作曲家需要 laravel/ui 不工作
- android - Android 在选项卡中的多个片段之间切换
- java - 在特定列中插入选择