如何遍历结构中的 unordered_map ?
How can I iterate through unordered_map which is in struct?
我有以下结构:
struct Node;
typedef unordered_map<char, Node*> Table;
struct Node {
Table table = {{'[=11=]', nullptr}};
bool terminal = false;
};
我在 class 中使用它来存储项目。所以我正在尝试编写析构函数。我的想法是递归遍历所有节点,直到我们到达一个空 table 的节点,然后清除结构的内存,然后从 table 中删除元素。但问题是它无法比较开始和结束迭代器。
void clear_memory(Node * cur_node) {
if (cur_node->table.empty()) {
delete cur_node;
return;
}
auto it = cur_node->table.begin();
while (it < cur_node->table.end()) {
clear_memory(it->second);
it = cur_node->table.erase(it);
}
}
~SomeClass() {
clear_memory(head);
}
我尝试使用基于范围的 for 循环,它工作正常,但我需要迭代器来擦除 table 中的元素。
P.S。我知道以这种方式使用指针是个坏主意,但这是学习作业。
您应该检查不等式。
while (it != cur_node->table.end()) {
我有以下结构:
struct Node;
typedef unordered_map<char, Node*> Table;
struct Node {
Table table = {{'[=11=]', nullptr}};
bool terminal = false;
};
我在 class 中使用它来存储项目。所以我正在尝试编写析构函数。我的想法是递归遍历所有节点,直到我们到达一个空 table 的节点,然后清除结构的内存,然后从 table 中删除元素。但问题是它无法比较开始和结束迭代器。
void clear_memory(Node * cur_node) {
if (cur_node->table.empty()) {
delete cur_node;
return;
}
auto it = cur_node->table.begin();
while (it < cur_node->table.end()) {
clear_memory(it->second);
it = cur_node->table.erase(it);
}
}
~SomeClass() {
clear_memory(head);
}
我尝试使用基于范围的 for 循环,它工作正常,但我需要迭代器来擦除 table 中的元素。
P.S。我知道以这种方式使用指针是个坏主意,但这是学习作业。
您应该检查不等式。
while (it != cur_node->table.end()) {