c++ - 使用哈希表构建符号表

标签 c++ hash hashmap hashtable

我正在尝试使用哈希表构建符号表。总体思路是

int alpha;
2 int beta;
3 alpha = 0; // the alpha declared in line 1
4 beta = 0; // the beta declared in line 2
5 gamma = 0; // Error! gamma hasn't been declared.
6 {
7 int beta; // This beta shadows the one declared in line 2.
8 int gamma;
9 alpha = 0; // the alpha declared in line 1
10 beta = 0; // the beta declared in line 7
11 gamma = 0; // the gamma declared in line 8
12 }

等等。您只能使用 vector 、列表、堆栈和队列库,并尝试使其尽可能快。 我的想法是在每个范围内,我在列表中声明哈希表并将所有信息保存到该表中,每当我有新的范围时,我将新的哈希表 push_back 到列表中。 但是,当程序在很远的范围之外查找项目时,这种方法似乎非常慢,因为您必须查找每个范围才能找到该项目。

你们有什么想法可以比这更快地实现这个范围吗?它应该更快,因为我的实现比“他们提供的慢速版本”慢

非常感谢!

最佳答案

所有内容只有一个哈希表,还有一堆上下文对象。每当您看到“{”时,将一个新对象压入堆栈。当你隐藏一个变量时,记住上下文对象中的旧符号,并在哈希表中覆盖它。当您看到 '}' 并弹出上下文时,恢复您在那里记住的符号。

关于c++ - 使用哈希表构建符号表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6184539/

相关文章:

c++ - 将此从构造函数传递给其他构造函数会在链接时产生 undefined reference

c++ - 相机抖动未激活 Unreal C++

android - 在 Android/OpenSL 中,我可以释放单个缓冲区并将其排入 bufferQueue 中,而不是清除整个缓冲区吗?

c++ - 计算正弦或余弦时出现奇怪的符号问题

matlab - 3 CUDA中的整数键查找

java - HashMap 和 ArrayList 在迭代/循环时添加

javascript - 获取 hashchange 之前的哈希值

ruby - 先按值排序散列,然后按键排序

ruby-on-rails - 将散列作为 hidden_​​field_tag 中的值传递

java - 比较 Java 中的 2 个 HashMap