C ++ std :: set如何处理元素的动态排序

时间:2013-10-01 19:54:37

标签: c++ set stdset

我有一个用我自己的comp函数声明的集合:

set<int, my_comp> my_set;

比较函数使用存储在别处的一些数据来决定哪个int更大。 如果所述数据发生变化,则该组元素的顺序也会发生变化。

如何设置处理? 如果我知道int的相对位置可能已经改变了,我是否必须删除并重新插入它?

详细信息:特别是,my_comp使用int作为索引来访问向量并比较向量中包含的值。所述值必然会发生变化。

1 个答案:

答案 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(至插入元素)。