清除multi_index_container

时间:2013-01-06 12:05:09

标签: c++ boost boost-multi-index

我的代码中有一个类(不是我的代码)使用boost 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 个答案:

答案 0 :(得分:4)

另外,你可以考虑

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

答案 1 :(得分:2)

尝试使用标准STL技巧而不是代码:

MapTable().swap(theMap);