2013-01-06 30 views
1

没有在我的代码(不是我的代码),它采用增强的multi_index_container类清除的multi_index_container

template <class T_key, class T_val> 
class foo_map { 
    typedef MapEntry_T<T_key, T_val> MapEntry; 

    typedef multi_index_container 
    < MapEntry 
    , indexed_by 
    < sequenced< tag<by_LRU> > 
    , ordered_unique 
    < tag<by_index> 
    , member<MapEntry, T_key, &MapEntry::first> 
    > 
    > 
    > MapTable; 
    typedef typename MapTable::template index<by_index>::type::iterator IndexIter; 

    MapTable theMap; 

public: 
    typedef IndexIter iterator; 
    void erase(iterator iter) { 
    theMap.get<by_index>().erase(iter); 
    } 

};

假设所有变量和类型都被正确定义。我不想把这个片段搞乱。代码实际上起作用。我想要做的是添加一个clear函数来清除所有元素。

void erase(iterator iter) { 
    for (iter = theMap.begin(); iter != theMap.end(); iter++) 
     theMap.get<by_index>().erase(iter); 
    } 

有人可以帮忙吗?我得到了一个100行错误!

回答

2

尝试标准STL把戏,而不是你的代码:

MapTable().swap(theMap); 
3

此外,您可以考虑

theMap.get<by_index>().clear();