关于set元素的不可直接更改

来源:互联网 发布:东莞淘宝代运营 编辑:程序博客网 时间:2024/05/23 20:02

set的元素类型和比较函数(或者函数对象)是可以配置的,但是一旦配置就不能更改。

set的元素类型不可更改是很自然的,这本就是模板的天然含义。

set的比较函数虽然可以得到,但是得到的是copy,不是引用或者指针,所以不能修改(修改比较函数对象的参数)。

set里面的元素不能直接的更改,一般的做法是先删除旧元素,然后添加新元素,这当然是为了维护里面元素的有序性。

单独的修改set的比较函数和元素数值,都有可能破坏set的有序性,从而破坏set的概念完整性,引起set的非预期行为。但是,从一个特殊的角度看,如果同时修改set的比较函数和元素数值,而且还能保证set内部元素的有序性,这不会破坏set的概念完整性,也不会引起任何的非预期行为。

我最近设计一个算法,正好发生在这种特殊的情况下,不得已只得修改STL的源码生成新的类(我命名为flexible_set),我觉得这是STL set类(也包括map,multiset,multimap)的一个缺陷。

概括起来,我得意思是:

1 修改比较函数

可以这样得到set的比较函数
key_compare kc = set_obj.key_comp();
但是我想这样得到
key_compare& kc = set_obj.key_comp();
然后调用kc的函数设置其参数。我说的修改比较函数就是这个意思

2 修改值

iterator it = set_obj.begin();

*it = 3;

原创粉丝点击