1

长话短说是否有效:

    map<int,int>m;
    m.insert( make_pair( 1, 40 ) );
    for( map<int,int>::iterator it = m.begin(); it != m.end(); ++it )
    {
        const_cast<int&>( it->first ) = 2;
    }

它有效,我在这个问题中遇到了自己,在实际情况下,映射是两个类的映射,map<classA,classB>并且要访问我必须访问的类的非常量成员const_cast<classA&>(it->first).NonConstFunction(),这是我的第一个想法请注意,这样做可以还是有更好的方法?

4

1 回答 1

8

这是不允许的。当您像这样就地修改键时,映射将不会“意识到”值已更改,因此它可能需要将该节点移动到它在内部维护的树中的新位置以存储数据。如果树不再排序,几乎树上的任何其他操作都可能崩溃和烧毁。

要正确执行此操作,您需要获取键/值对的副本,从映射中删除旧节点,在映射之外修改您的副本,然后将修改后的副本插入回映射中。

于 2012-11-17T05:36:09.123 回答