提升 flat_map 批量插入
boost flat_map batch insertion
我有一个维护 boost::flat_map 的 C++ 程序。它以(键,值)的形式接收实时命令。如果值为 0,则应删除 flat_map[key](如果存在)。如果值不为零,则 flat_map[key] 应设置为 flat_map 中的值(如果该条目已存在),或者如果该条目尚不存在则应将其插入。
然而,命令并没有一一出现。相反,它们是成批出现的,程序只需要在处理完每批命令后对 flat_map 进行排序。它不需要在处理一批命令的过程中对 flat_map 进行排序。
鉴于这种灵活性,是否有一种方法可以减少处理时间,方法是避免在每个 insertion/deletion 上移动许多元素的 flat_map 开销,并且只在每个批次结束时产生一次该开销?该程序对延迟非常敏感。
感谢您的任何意见!
您可以使用 extract_sequence
/ adopt_sequence
来更新基础向量,只要它最终是有序且唯一的,开销中只有一对向量移动。
auto underlying = my_map.extract_sequence();
// merge underlying and batch
my_map.adopt_sequence(boost::ordered_unique_range_t{}, std::move(underlying));
我有一个维护 boost::flat_map 的 C++ 程序。它以(键,值)的形式接收实时命令。如果值为 0,则应删除 flat_map[key](如果存在)。如果值不为零,则 flat_map[key] 应设置为 flat_map 中的值(如果该条目已存在),或者如果该条目尚不存在则应将其插入。
然而,命令并没有一一出现。相反,它们是成批出现的,程序只需要在处理完每批命令后对 flat_map 进行排序。它不需要在处理一批命令的过程中对 flat_map 进行排序。
鉴于这种灵活性,是否有一种方法可以减少处理时间,方法是避免在每个 insertion/deletion 上移动许多元素的 flat_map 开销,并且只在每个批次结束时产生一次该开销?该程序对延迟非常敏感。
感谢您的任何意见!
您可以使用 extract_sequence
/ adopt_sequence
来更新基础向量,只要它最终是有序且唯一的,开销中只有一对向量移动。
auto underlying = my_map.extract_sequence();
// merge underlying and batch
my_map.adopt_sequence(boost::ordered_unique_range_t{}, std::move(underlying));