对两个向量进行最优迭代

iterating over two vectors optimally

本文关键字:迭代 向量 两个      更新时间:2023-10-16

我有两个向量,每个向量包含50k个对象,表示从日志文件中提取的数据。每个对象包含时间戳、设备名称和链接名称。一个向量(down)包含linkdown对象,另一个向量(ups)包含linkup对象。我需要找到每个设备的链接停机时间,所以我迭代down向量并检查up向量,以查看是否(uptime>停机时间)。Up_device == down_device &Up_link == down _link)。内循环每次都从顶部开始,这使得停机时间计算在迭代down向量时变慢。下面是循环:

for(link_iter p = downs.begin(); p!=downs.end(); ++p){
   for(link_iter q = ups.begin(); q!=ups.end(); ++q){
      if(q->time > p->time && q->dev == p-> dev && q->link == p->link){
        downtimes.push_back(downtime(q->time - p->time, q->dev, q->link));
        break;
      }
   }
} 

是否有一种方法可以让q和p一起前进,这样q就不会在每次p增加的时候开始?还是有更好的方法?非常感谢!

发布OP评论:

非常感谢OMGtechy和Cameron ..我已经按照建议修改了。我读取日志文件,如果我得到一个down事件,我push_back到down向量,但如果我得到一个up,我反向迭代下来找到第一个匹配的设备和链接。然后我创建停机时间并将其推回停机时间。再次感谢您的帮助,非常感谢!