一些二叉树数据结构(例如Splay树)将在读取时重新平衡以将最近访问的项目移向根,从而可以减少后续查找时间。
标准容器(std::map
, std::set
)是否允许这样做?
至少一个问题是线程安全。以前,我认为只要您只在标准容器上执行只读操作,就可以安全地从多个线程执行此操作而无需引入互斥锁/锁等。也许我需要重新考虑一下?
我知道通常红黑树用于标准树容器,并且这些数据结构通常不会在读取时修改。但是,修改后的假设实现是否符合要求?
我的 c++-standards-foo 需要改进,但我不确定当前标准是否解决了容器的线程安全问题。这有什么不同c++0x
吗?