a*******n 发帖数: 64 | 1 题目大概是:设计一个类似于普通map的class,主要的不同是添加每个元素的时候,有
一个时间参数long type, 单位是ms。比如50000,如果50000ms passes,这个元素没有
被人为删除的话,它需要被自动删除。base class的定义myMap::add, myMap::erase都
是pure virtual function。
我当时给出的答案是用STL::map存储,然后用STL:unordred_map存储<
current_time+时间参数, a list of elements of 1st map>,系统时间前进的时候,
去第二个map里找到list删除第一个map里的element。答得很笼统,当时要求写具体的
code,不知道C++里涉及到系统时间的函数是啥。 |
s****3 发帖数: 270 | |
C*****n 发帖数: 1049 | 3 这样能不能满足要求?
hashmap>
查询的时候如果时间已经过了exp_time直接删除,返回null |
a*******n 发帖数: 64 | 4 这个不满足,题目要求时间到必须删除。
【在 C*****n 的大作中提到】 : 这样能不能满足要求? : hashmap> : 查询的时候如果时间已经过了exp_time直接删除,返回null
|
t**n 发帖数: 272 | 5 用priority_queue, pq的排序按照expiration time排。
【在 a*******n 的大作中提到】 : 题目大概是:设计一个类似于普通map的class,主要的不同是添加每个元素的时候,有 : 一个时间参数long type, 单位是ms。比如50000,如果50000ms passes,这个元素没有 : 被人为删除的话,它需要被自动删除。base class的定义myMap::add, myMap::erase都 : 是pure virtual function。 : 我当时给出的答案是用STL::map存储,然后用STL:unordred_map存储< : current_time+时间参数, a list of elements of 1st map>,系统时间前进的时候, : 去第二个map里找到list删除第一个map里的element。答得很笼统,当时要求写具体的 : code,不知道C++里涉及到系统时间的函数是啥。
|
s****3 发帖数: 270 | 6 马上删除? 那感觉必须用另一个执行绪帮忙monitor 了? |
r*******e 发帖数: 7583 | 7 跟定时器差不多吧
【在 s****3 的大作中提到】 : 马上删除? 那感觉必须用另一个执行绪帮忙monitor 了?
|
w*******i 发帖数: 186 | 8 感觉你可以用eager mode也可以用lazy mode。eager mode就是到了expiration time也
不删,只是在用到那个entry的时候再顺便删掉,优点是实现简单省计算量,缺点是如
果使用不平凡就占空间了。eager mode就跟你说的差不多,需要另外有个程序定时检查
最小堆。其实如果元素加入频繁,expiration时间长的话,那么多指针放在额外的堆里
也会占不少空间的。具体情况得具体分析。 |