在C中创建基于时间的地图

时间:2013-07-22 07:13:10

标签: c keyvaluepair

所以我有一张来自Key的地图 - >结构

我的密钥将是设备IP地址,而值(结构)将保存设备的IP地址,并且经过该时间量后的时间将使密钥值对到期,因此从地图中删除。

我对此很新,所以想知道什么是一个很好的方法。

我已经google了一下,似乎只在Java中找到了很多基于时间的地图

修改

遇到this后,我想我可能需要在其中创建一个包含项目的地图,然后与每个元素的引用并行显示一个双端队列。然后定期调用clean,如果它已经存在超过x的时间,则删除它。

这是正确的吗?任何人都可以提出更优化的方法吗?

1 个答案:

答案 0 :(得分:1)

我使用了三种方法来解决这样的问题。

  1. 使用定期计时器。每一次量子,获得所有到期元素并使它们到期。将元素保留在计时器轮中,请参阅scheme 7 in this paper for ideas.这里的开销是周期性计时器在没有任何操作时会启动,并且存储桶具有恒定的内存开销,但如果你这是最有效的事情你可以做从地图中添加和删除内容的次数远远超过从中过期的元素。

  2. 检查所有元素的最短到期时间。安排一个计时器在这段时间后启动。在计时器中,删除过期的元素并安排下一个计时器。如果到期时间短于当前计划的计时器,则每次添加新元素时重新计划计时器。将元素保存在堆中,以便快速查找最先需要过期的人员。这具有相当大的插入和删除开销,但是当地图中最常见的删除到期时非常有效。

  3. 每次访问地图时,请检查您访问的元素是否已过期。如果是的话,就把它扔掉,并假装它首先不在那里。这可能是非常低效的,因为所有调用都会检查每次访问的时间戳,如果您需要在到期时执行某些操作,则无效。