我有一个用我自己的comp函数声明的集合:
set<int, my_comp> my_set;
比较函数使用存储在别处的一些数据来决定哪个int更大。 如果所述数据发生变化,则该组元素的顺序也会发生变化。
如何设置处理? 如果我知道int的相对位置可能已经改变了,我是否必须删除并重新插入它?
详细信息:特别是,my_comp使用int作为索引来访问向量并比较向量中包含的值。所述值必然会发生变化。
答案 0 :(得分:1)
不,严格的弱订单不得更改std::set
中的元素,必须将该键视为const
。
比较函数必须是strict weak ordering的模型:
严格的弱排序具有以下属性。对于所有 x , y 和 z 在S,
- 对于所有 x ,情况不是 x &lt; x (irreflexivity)。
- 对于所有 x , y ,如果 x &lt; y 那么 y &lt; y x (不对称)。
- 对于所有 x , y 和z,如果 x &lt; y 和 y &lt; z 然后 x &lt; z (及物性)。
- 对于所有 x , y 和 z ,如果 x 与 y <无法比较/ em>, y 与 z 无法比较,然后 x 与 z 无法比较 (不可比性的传递性)。
更好的解决方案可能是排序的std::vector
,以及std::sort
(对其进行排序),std::lower_bound
(查找和插入元素),std::inplace_merge
(至插入元素)。