0

我有以下代码,我想在其中消除我最初创建的值为 10 的元素。我在设置迭代器和擦除它时遇到了麻烦。它是如何完成的?

#include <iostream>
#include <boost/unordered_map.hpp>

using namespace std;

int main()
{
    typedef boost::unordered_map<int, boost::unordered_map<int, boost::unordered_map<int, int> > >::const map_it;
    typedef boost::unordered_map<int, boost::unordered_map<int, boost::unordered_map<int, int> > > _map;
    _map _3d;

    _3d[0][0][0] = 10;

    cout<<_3d[0][0][0]<<endl;

    map_it = _3d[0][0][0].begin();

    _3d[0][0][0].erase(map_it);

    return 0;
}



multimapBoost.cpp||In function 'int main()':|
multimapBoost.cpp|16|error: expected unqualified-id before '=' token|
multimapBoost.cpp|18|error: request for member 'erase' in '((boost::unordered_map<int, int, boost::hash<int>, std::equal_to<int>, std::allocator<std::pair<const int, int> > >*)((boost::unordered_map<int, boost::unordered_map<int, int, boost::hash<int>, std::equal_to<int>, std::allocator<std::pair<const int, int> > >, boost::hash<int>, std::equal_to<int>, std::allocator<std::pair<const int, boost::unordered_map<int, int, boost::hash<int>, std::equal_to<int>, std::allocator<std::pair<const int, int> > > > > >*)_3d.boost::unorder|
multimapBoost.cpp|18|error: expected primary-expression before ')' token|
||=== Build finished: 3 errors, 0 warnings ===|
4

1 回答 1

3

你有太多了[0]

_3d[0][0][0].begin(); 
// should be:
_3d[0][0].begin();

此外,map_it是一个类型,而不是一个变量;您需要声明一个类型的变量map_it并分配或初始化该变量。

的类型_3d[0][0].begin()只是boost::unordered_map<int, int>::iterator(或const_iterator);的类型_3d.begin()将是您似乎正在尝试使用的嵌套迭代器类型。

一些额外的 typedef 将使这段代码更简单。

于 2011-07-22T05:13:15.280 回答