我正在尝试使用C ++ std库中的unordered_set
。我正在使用std命名空间。
using namespace std;
unordered_set
属于我的职能范围。我想用它来记住一些价值观。
int do_crazy_calculations(int n) {
static unordered_set<int> done_before;
done_before::iterator node_found = done_before.find(n);
// n has not been seen before, so do calculations and memoize the result.
if (node_found == done_before.end()) {
int result = actually_do_calculations(n);
done_before.insert(n, result);
return result;
}
// n has already been seen before, just return the memoized value.
else {
return node_found.get();
}
}
但是,我收到了这个编译错误:
CplusplusExperiment.cpp:在函数
'int do_crazy_calculations(int)'
中:
CplusplusExperiment.cpp:10:10:错误:'unordered_set'
没有命名类型
make:*** [CplusplusExperiment.o]错误1
但是,我确实为unordered_set
- int
分配了一个类型吗?这个错误意味着什么?
答案 0 :(得分:12)
using namespace std
- 这是一千个令人沮丧的错误的来源。 done_before
实际上没有命名一个类型,它命名一个变量。要命名您可以使用typedef unordered_set<int> done_before_type
的类型,done_before_type::iterator
将起作用。<unordered_set>
答案 1 :(得分:4)
应为unordered_set<int>::iterator node_found = ...
我通常使用typedef来简化模板化变量的命名:
typedef unordered_set<int> t_done_before;
static t_done_before done_before;
t_done_before::iterator node_found = ...
答案 2 :(得分:2)
首先,unordered_set在TR1或C ++ 11中。
第二,你在函数中声明了这个集合,然后在其中测试了一些值。重点是什么?每次调用该函数时,该集都将为空。编辑:对不起,没注意到它是静态的。