赞
踩
请你设计一个日志系统,可以流式接收日志以及它的时间戳。
该日志会被打印出来,需要满足一个条件:当且仅当日志内容 在过去的 10 秒钟内没有被打印过。
给你一条日志的内容和它的时间戳(粒度为秒级),如果这条日志在给定的时间戳应该被打印出来,则返回 true,否则请返回 false。
要注意的是,可能会有多条日志在同一时间被系统接收。
实例:
- Logger logger = new Logger();
- // 日志内容 "foo" 在时刻 1 到达系统
- logger.shouldPrintMessage(1, "foo"); returns true;
- // 日志内容 "bar" 在时刻 2 到达系统
- logger.shouldPrintMessage(2,"bar"); returns true;
- // 日志内容 "foo" 在时刻 3 到达系统
- logger.shouldPrintMessage(3,"foo"); returns false;
- // 日志内容 "bar" 在时刻 8 到达系统
- logger.shouldPrintMessage(8,"bar"); returns false;
- // 日志内容 "foo" 在时刻 10 到达系统
- logger.shouldPrintMessage(10,"foo"); returns false;
- // 日志内容 "foo" 在时刻 11 到达系统
- logger.shouldPrintMessage(11,"foo"); returns true;
思路
- 用一个map建立消息和时间戳之间的映射
- 当调用shouldPrintMessage时:
- 如果发现msg不存在map中,那么建立映射并返回true
- 如果发现msg在map中,那么先比较curr.time > 10 + map[msg].time,如果成立,那么需要返回true否则返回false,在返回之前需要更新map
实现
- class Logger {
- std::unordered_map<std::string, int> m;
- public:
- Logger() {}
-
- bool shouldPrintMessage(int timestamp, string message) {
- bool flag = false;
- if(!m.count(message) || m[message] + 10 < timestamp){
- flag = true;
- }
- m[message] = timestamp;
- return flag;
- }
- };
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。