我有一个维护boost::flat_map的C++程序。它以(key,value)的形式接收实时命令。如果值为0,则应删除flat_mapkey (如果存在)。如果value为非零值,则如果条目已经存在,则应在flat_map中将flat_mapkey设置为value,或者,如果条目不存在,则应插入该条目。
但是,这些命令并不是一个接一个地出现。相反,它们是成批出现的,程序只需要在处理完每一整批命令后对flat_map进行排序。它不需要在处理一批命令的过程中对flat_map进行排序。
考虑到这种灵活性,有没有一种方法可以通过避免每次插入/删除时移动许多元素的flat_map开销,并且只在每个批处理结束时产生一次开销来减少处理时间?该程序对延迟非常敏感。
感谢你可能得到的任何意见!
发布于 2021-06-15 16:32:27
您可以使用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));https://stackoverflow.com/questions/67980026
复制相似问题