为什么std :: set in function from <algorithm>会将非const对象更改为const?

时间:2017-04-26 09:29:21

标签: algorithm c++11 set

我在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,但我认为它是错误的,因为我可以毫无问题地使用迭代器来获取对象并进行更改。

有人可以解释一下,这里会发生什么

1 个答案:

答案 0 :(得分:1)

因为您无法修改std::set中的元素。该集合无法知道您已更改的内容并将使其无效。如果可以,它将允许它破坏严格弱排序不变量的可能性,导致未定义的行为。

如果要修改元素,则应擦除元素,然后插入新元素。我认为力恒定是为了防止尝试修改元素。