Algorithm 为什么std::在函数中设置自<;算法>;将非常量对象更改为常量?
我在std::vector中有10000个非常量对象。我想把它们放在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
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);
});