c++ - boost flat_map批量插入

标签 c++ dictionary boost containers boost-container

我有一个 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/

相关文章:

c++ - valgrind:中断 crypto++ zlib 测试

c++ - 来自 OSX 应用程序的 Mkdir

python - Python 中(不是全部)字典键的最大值

c++ - boost Multi_Index 问题

c++ - 使用 async_write 同时写入不同的套接字

c++ - 将小部件添加到 QTabWidget

c++ - 以十六进制打印数据结构值

javascript - 从 Array of Arrays 创建 JavaScript 字典的简单方法

python - 在 Python 中制作菜单

c++ - 同一 boost tcp 套接字对象上的多个连接