【发布时间】:2013-10-01 19:54:36
【问题描述】:
我有一个用我自己的 comp 函数声明的集合:
set<int, my_comp> my_set;
比较函数使用存储在别处的一些数据来决定哪个 int 更大。 如果所述数据发生变化,则集合元素的顺序也会发生变化。
set 如何处理这个问题? 如果我知道一个 int 的相对位置可能已经改变,我是否必须移除并重新插入它?
详细信息:特别是,my_comp 使用整数作为索引来访问向量并比较向量中包含的值。上述值必然会发生变化。
【问题讨论】:
-
没有简单的解决方案。据
std::set所知,即使是对订单的最小更改也可能会迫使树重新平衡到根节点。自定义红黑树可能会通过不回收旧节点的内存来节省一些时间,但仅此而已。