gpt4 book ai didi

c++ - const_cast 映射的键值是否有效?

转载 作者:太空宇宙 更新时间:2023-11-03 10:32:17 25 4
gpt4 key购买 nike

长话短说是否适用于:

    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 是两个类的 map ,map<classA,classB>并访问类的非常量成员我必须 const_cast<classA&>(it->first).NonConstFunction() ,这是我想到的第一个想法,这样做是没问题还是有什么更好的

最佳答案

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

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

关于c++ - const_cast 映射的键值是否有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13428008/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com