映射迭代器遍历技术

时间:2012-10-05 22:39:38

标签: c++ map iterator

我在声明迭代器遍历地图并查找值时遇到了问题。我在'fibiter'之前得到了“预期的初始化器”的错误。

map <int, int> fibHash;

int memoized_fib(int n)
{
    map <int, int> iterator fibiter = fibHash.find(n); //ERROR HERE

    if(fibiter != fibHash.end())
        return  *fibiter;

    int fib_val;
    if(n  <= 1)
        fib_val = 1;
    else
        fib_val = memoized_fib(n - 1) + memoized_fib(n - 2);

    fibHash[n] = fib_val;
    return fib_val;
}

int main()
[..]

2 个答案:

答案 0 :(得分:4)

您忘记使用范围解析运算符::。编译器认为您声明了一个名为map<int, int>的{​​{1}},因此在找到iterator时会感到困惑。

fibiter

是你想要的

答案 1 :(得分:1)

map <int, int> iteratormap <int, int>::iterator

iterator是在类&#34; map&#34;中定义的typedef。 您可以查看<bits/stl_map.h>第139行中GCC 4.6.3附带的标准库的实现,您有:

typedef typename _Rep_type::iterator               iterator;

由于typedef属于类的定义,你应该添加&#34;:&#34;这样编译器就知道在哪里找到它。