我在std :: vector中有10000个非const对象。我想把它们放在std :: set。
中<ul id="cat">
<li id="test_3" data-id="3">Text 3</li>
<li id="test_1" data-id="1">Text 1</li>
<li id="test_2" data-id="2">Text 2</li>
</ul>
我想更改此对象中的一些变量。
set<Object,bool(*)(Object, Object)> s([](Object a, Object b){
return a.getId() < b.getId()});
为什么当我在函数中使用set时,它会给出错误,即对象&#34;会丢失const限定符&#34;。但是对于矢量,一切都很正常。我有几个想法: 1)在for_each中它自动使用const_iterator。 2)该集合只是将非const转换为const,但我认为它是错误的,因为我可以毫无问题地使用迭代器来获取对象并进行更改。
有人可以解释一下,这里会发生什么
答案 0 :(得分:1)
因为您无法修改std::set
中的元素。该集合无法知道您已更改的内容并将使其无效。如果可以,它将允许它破坏严格弱排序不变量的可能性,导致未定义的行为。
如果要修改元素,则应擦除元素,然后插入新元素。我认为力恒定是为了防止尝试修改元素。