我有一个 C++ 程序,它维护 boost::flat_map。它以(key,value)的形式接收实时命令。如果 value 为 0,则 flat_map[key] 如果存在则应删除。如果 value 不为零,则如果该条目已存在,则应该将 flat_map[key] 设置为 flat_map 中的值;如果该条目尚不存在,则应将其插入。
但是,命令并不是一一出现的。相反,它们是成批出现的,程序只需要在每整批命令处理完毕后对 flat_map 进行排序。在处理一批命令的过程中不需要对 flat_map 进行排序。
鉴于这种灵活性,是否有一种方法可以通过避免在每次插入/删除时移动许多元素的 flat_map 开销来减少处理时间,并且只在每个批处理结束时产生一次该开销?该程序对延迟非常敏感。感谢您提出的任何意见!
最佳答案
您可以使用extract_sequence
/adopt_sequence
更新底层 vector ,只要它最终是有序且唯一的,则开销中只有一对 vector 移动。
auto underlying = my_map.extract_sequence();
// merge underlying and batch
my_map.adopt_sequence(boost::ordered_unique_range_t{}, std::move(underlying));
关于c++ - boost flat_map批量插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67980026/