【发布时间】:2012-06-21 17:07:44
【问题描述】:
我的地图是这样定义的:
map<string, LocationStruct> myLocations; 其中key是时间字符串
我在这张地图中只保留了 40 件物品,当我达到 40 件物品时,我想放弃地图中的最后一件物品。我知道我做不到myLocations.erase(myLocations.end()),那我该怎么做呢?
我确实希望地图中的最后一项是最旧的,因此是 FIFO。数据将很快进入(大约 20Hz),所以我希望地图能跟上它。我确实需要根据时间查找数据,所以我确实需要它作为关键,但我愿意接受其他方法来实现这一点。
字符串的格式是一个非常冗长的“Thursday June 21 18:44:21:281”,但为了简单起见,我可以将其缩减为自纪元以来的秒数。这是我第一次尝试,还没有过多考虑格式。
【问题讨论】:
-
myLocations.erase(myLocations.rbegin())不会做这项工作吗? -
听起来,您想要某种固定长度的队列/优先级队列,而不是(排序的)地图。
-
@Rook
map<>::erase将迭代器而不是 reverse_iterator 作为其位置参数。 -
您应该努力将日期/时间视为程序逻辑中的数字,并且仅将文本格式用于输入/输出目的。
-
你的日期格式很不方便。
time_t类型的秒格式会更容易使用。如果出于某种原因必须使用字符串格式,请使用(相对)健全且标准化的系统,如 ISO 8601,其中时间和字典排序顺序是相同的。