gpt4 book ai didi

c++ - std::set 迭代器自动 const

转载 作者:IT老高 更新时间:2023-10-28 22:33:41 24 4
gpt4 key购买 nike

Possible Duplicate:
C++ STL set update is tedious: I can't change an element in place

为了简单起见,我已经提取了问题并更改了名称。

基本上我实例化一个类并将其存储在 std::set 中,稍后我想引用该类,以便我可以检查它的值并修改它们...

简化代码:

        MyClass tmpClass;
std::set<MyClass > setMyClass;
setMyClass.insert(tmpClass);
std::set<MyClass >::iterator iter;
iter=setMyClass.begin();
MyClass &tmpClass2=*iter;

和错误:

error C2440: 'initializing' : cannot convert from 'const MyClass' to 'MyClass &'

(我也删除了部分错误消息“MVB::Run::”以清除它。)

如果我在最后一行代码中添加一个前面的“const”,那么一切正常,但我无法更改值...

这是正常行为吗?比如说,我必须删除数据、更改值并重新放回去?

我感觉这与集合的排序有关,但我不会触及用于排序的变量。

最佳答案

我确定你不会触及用于排序的变量,你可以使用const_cast 来解决这个问题。像这样:

    MyClass tmpClass;
std::set<MyClass > setMyClass;
setMyClass.insert(tmpClass);
std::set<MyClass >::iterator iter;
iter=setMyClass.begin();
const MyClass &tmpClass2=*iter;

MyClass &tmpClass3 = const_cast<MyClass&>(tmpClass2);

或者,您可以将要更改的类的成员声明为 mutable.

关于c++ - std::set 迭代器自动 const,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9726375/

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