距离地图最近的字符串/时间戳

时间:2013-01-13 18:31:24

标签: c++

如果时间戳不在存储有时间戳的地图中,我想在地图中找到最接近的匹配时间戳,并使用最接近的值作为关键字。我有基本的结构设置,我正在尝试做什么我只是不确定如何找到最近的时间戳

typedef std::map<std::string,int>  Map;
Map::iterator it;
Map my_map;

my_map["2010-01-26 17:02:12"]= 1;
my_map["2010-01-25 08:55:29"]= 2;
my_map["2010-01-24 08:55:29"]= 3;

string timestamp = "2010-01-24 08:55:30"; // would return 3
string timestamp1 = "2010-01-27 01:55:30"; // would return 1

  it = my_map.find(timestamp); 
     if(it == my_map.end()){
       //not sure how to approach this
   }    

更新

我正在努力避免将相当大的代码库从std::string转换为uint64_t,尽管它会提高性能,但这不是一个大问题,

我无法使std::map::lower_boundstd::map::upper_bound解决方案起作用 这是我在IDE ONE上的尝试,

http://ideone.com/MnRLIH

2 个答案:

答案 0 :(得分:5)

您可以使用std::map::lower_boundstd::map::upper_bound获得所需内容,其中任何一项都是 O(日志N)复杂性。


另外,强烈考虑将时间戳存储为uint64_t而不是字符串。这将大大减少比较和处理的计算量。

答案 1 :(得分:3)

我相信有upper_bound()lower_bound()个功能,您可以使用这些功能找到上方和下方的邻居。