我需要存储一些键/值对,并再次访问它们所引用的键-不一定在地图中,尽管这看起来很自然。此外,如果地图超过一定大小,则需要删除最旧的对。
有没有一种方法可以使用映射或类似的结构以某种方式在C ++ 11中将映射和队列结合起来实现此目的?
更新:我想用一个std::unsorted_map
。不幸的是,我严重缺少std::map
可以提供帮助的功能。无序列表似乎既不支持rbegin()
也不支持其迭代器--
,因此我无法使用end()
。
有没有比循环遍历更好的方法了size()-1
?
对于此问题没有唯一的解决方案,最简单的解决方案是使用辅助队列按插入顺序存储密钥。
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();
}
}
您一直在使用映射来通过键访问元素,除了上述两种方法之外,不应在其他任何地方使用队列。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句