Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 为什么std::在函数中设置自<;算法>;将非常量对象更改为常量?_Algorithm_C++11_Set - Fatal编程技术网

Algorithm 为什么std::在函数中设置自<;算法>;将非常量对象更改为常量?

Algorithm 为什么std::在函数中设置自<;算法>;将非常量对象更改为常量?,algorithm,c++11,set,Algorithm,C++11,Set,我在std::vector中有10000个非常量对象。我想把它们放在std::集合中 set<Object,bool(*)(Object, Object)> s([](Object a, Object b){ return a.getId() < b.getId()}); 为什么当我使用中的函数集时,它会给我一个错误,即对象“将丢失常量限定符”。但对于向量,一切都是正常的。我有几个想法: 1) 在for

我在std::vector中有10000个非常量对象。我想把它们放在std::集合中

set<Object,bool(*)(Object, Object)> s([](Object a, Object b){
                                     return a.getId() < b.getId()});
为什么当我使用中的函数集时,它会给我一个错误,即对象“将丢失常量限定符”。但对于向量,一切都是正常的。我有几个想法: 1) 在for_each中,它自动使用常量迭代器。 2) 集合只是将non-const转换为const,但我认为这是错误的,因为我可以毫无问题地使用迭代器获取对象并对其进行更改


谁能解释一下,这里发生了什么,因为您不能修改
std::set
中的元素。集合无法知道您所更改的内容,并且将使其无效。如果可以,它可能会破坏严格的弱序不变量,导致未定义的行为

如果要修改图元,则应删除该图元,然后插入一个新图元。我认为力的恒定性是为了防止试图修改元素

for_each(s.begin(), s.end(), [=](Object& a){
    a.setId(new_id);
  });