用于c ++的FIFO映射

Mar*_*ste 4 c++ stl map

我需要存储一些键/值对并再次通过键引用它们 - 不一定在地图中,尽管这看起来很自然.此外,如果地图超过一定的大小,我需要删除最旧的对.

有没有办法使用地图或类似的结构以某种方式在C++ 11中组合地图和队列来实现它?

更新:我想用这个std::unsorted_map.不幸的是,我非常缺少std::map有用的功能.无序列表似乎既不支持rbegin()也不支持--运算符,因此我也不能使用它们end().

有没有比循环迭代更好的方法size()-1

Jua*_*rez 5

对于这个问题没有唯一的解决方案,最简单的方法是使用辅助队列按插入顺序存储密钥.

map<string, string> m_myMap;
queue<string>       m_myQueue;

void insert(const string& key, const string& value) {
  m_myMap.insert(make_pair(key, value));
  m_myQueue.push(key);
}

void deleteOldOnes() {
  while (m_myQueue.size() > MAX_SIZE) {
   m_myMap.erase(m_myQueue.front());
   m_myQueue.pop();
  }
}
Run Code Online (Sandbox Code Playgroud)

您继续使用映射按键访问元素,不应在上述两种方法之外的任何地方使用该队列.

  • 因为那些下划线标识符与我看起来像成员函数的范围相同(当然不会有`insert`和`deleteOldOnes`以及两个容器类作为独立的全局变量?),我会认为它们'重新分类范围,而不是文件范围(重要的是它). (2认同)
  • 伙计,你得到了我的赞成。我在抱怨无效代码,因为您发布的代码是……无效的(我已经解释了原因;请随时查看标准的 [global.names] 部分)。您不必通过编译器传递代码即可将其发布到此处。但是你应该发布 *valid* 代码。当然。 (2认同)