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

标签 c++ set constants std

<分区>

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/40161432/

相关文章:

c++ - 在 Objective-C 中转发声明 C++ 类

c++ - fatal error : opencv/cvtypes. h:没有这样的文件或目录编译终止

c# - vtables是如何在c++和c#中实现的?

java - 如何找到一个元素?

PHP 未定义的常量错误没有意义

actionscript-3 - 在接口(interface) : IDE okay but mxmlc fails? 中使用常量作为默认参数值

c++ - 如何在 C++ 中创建 map<string, class::method> 并能够搜索函数并调用它?

ruby - 在 Set 中产生以在数组中消除

python - 是否存在 "in"始终返回 true 的集合?

arrays - 创建具有可变数量元素的数组变量