相关疑难解决方法(0)

LRU缓存设计

最近最少使用(LRU)缓存首先丢弃最近最少使用的项目如何设计和实现这样的缓存类?设计要求如下:

1)尽可能快地找到项目

2)一旦缓存未命中并且缓存已满,我们需要尽快替换最近最少使用的项目.

如何在设计模式和算法设计方面分析和实现这个问题?

c++ algorithm lru data-structures

66
推荐指数
3
解决办法
6万
查看次数

在C++中存储和检索复杂对象的有效方法?

我正在制作一个小型地下城模拟游戏.游戏非常详细,我计划随着时间的推移,有一个代表"怪物"的类的+ 200k实例.它们包含该怪物的特权,技能和历史.像他使用了多少药水,他住在哪里,他的巡逻路线是什么等等.

我开始用SQLite实现它,并使用一个名为"monsters"的简单表,其中包含所有数据.这允许我使用SQL查询来查找每帧上模拟计算所需的怪物.例如:找到所有巡逻A点的怪物,或找到使用了药水X的所有怪物等等.不幸的是,在每一帧上多次查询SQLite会很快减慢游戏速度.即使它是2D游戏,我也需要宝贵的毫秒来进行模拟计算.

此外,我将来需要JOIN来制作图表:我需要知道怪物是否攻击了另一个怪物,或者怪物是否是另一个怪物团队的一部分.这会使事情进一步减缓.

有没有人对如何处理这个有任何建议?

我的数据类似于以下内容:

http://farm3.static.flickr.com/2450/3614560130_aaafa37387.jpg?v=0

c++ game-engine

22
推荐指数
2
解决办法
1247
查看次数

使用C++的最近最少使用的缓存

我正在尝试使用C++实现LRU Cache.我想知道实现它们的最佳设计是什么.我知道LRU应该提供find(),添加一个元素并删除一个元素.删除应删除LRU元素.实现此目的的最佳ADT是什么?例如:如果我使用带有元素的映射作为值和时间计数器作为键我可以在O(logn)时间内搜索,Inserting是O(n),删除是O(logn).

c++ algorithm lru data-structures

10
推荐指数
3
解决办法
2万
查看次数

C++设计:如何缓存最近使用的

我们有一个C++应用程序,我们尝试提高性能.我们发现数据检索需要花费大量时间,并且想要缓存数据.我们无法将所有数据存储在内存中,因为它很大.我们希望在内存中存储多达1000个项目.这些项目可以通过long密钥编制索引.但是,当缓存大小超过1000时,我们想要删除最长时间未访问的项目,因为我们假设某种"引用位置",即我们假设最近访问的缓存中的项目可能会再次访问.

你能建议一种实现它的方法吗?

我最初的实现是拥有一个map<long, CacheEntry>存储缓存,并添加一个accessStamp成员,CacheEntry只要创建或访问条目,就会将其设置为增加的计数器.当缓存已满并需要新条目时,代码将扫描整个缓存映射并找到最低的条目accessStamp,并将其删除.这样做的问题是,一旦缓存已满,每次插入都需要对缓存进行全面扫描.

另一个想法是举行的名单CacheEntries,除了缓存地图,并在每个访问移动访问的条目到列表的顶部,但问题是如何快速地在列表中找到该条目.

你能建议一个更好的方法吗?

谢谢
splintor

c++ caching

6
推荐指数
2
解决办法
8032
查看次数

C++ 如何将地图与循环缓冲区混合?

我想知道是否有可能有一个像增强循环缓冲区一样工作的地图。这意味着它的大小有限,当它达到有限大小时,它将开始覆盖第一个插入的元素。我也希望能够通过这样的缓冲区进行搜索并find or create使用[name]. 是否有可能创造这样的东西以及如何做到?

c++ boost dictionary circular-buffer

5
推荐指数
1
解决办法
4753
查看次数

限制std :: set的大小

我有一个关于std :: set容器的简短问题.现在我正在使用pushback功能来提供我的设置.对于每个push_back,该集合变得越来越大.我只对最新的30个元素感兴趣......可以删除旧元素.所以我的想法是将集合的大小限制为30个元素左右,并通过这样做摆脱不需要的旧元素.但是,默认情况下,该集不支持限制.我可以偶尔检查一下这个集的大小,然后手动删除多余的元素.有更聪明的方法吗?

关心Lumpi

c++ lru stdset

4
推荐指数
2
解决办法
2690
查看次数