gpt4 book ai didi

c++ - 通过不影响不变量的集合的非常量迭代器访问成员

转载 作者:行者123 更新时间:2023-11-30 02:03:14 27 4
gpt4 key购买 nike

假设我有这样的代码:

#include <set>
#include <math.h>

typedef int OtherTypes;

struct MyType
{
double Field1;
OtherTypes MoreFields;

MyType(double blah) :
Field1(blah)
{
}

bool operator < (const MyType &That) const
{
// Does not use any other member besides Field1
return ( fabs(Field1 - That.Field1) > 1e-6 &&
Field1 < That.Field1 );
}

};

int main()
{
std::set<MyType> foo;
std::pair< std::set<MyType>::iterator,
bool > inchk = foo.insert(MyType(1.0));

OtherTypes SomeVal = 1;
if ( inchk.second )
inchk.first->MoreFields = SomeVal; // error

}

我如何向编译器保证编写 MoreFields 不会影响任何不变量或不会做任何使顺序无效的事情集合中的元素?

如果唯一的办法是使用另一个容器,例如 vector,如何我是否在检查是否有一个时在排序位置插入一个新值已经存在?

最佳答案

  • MoreFields 声明为 mutable,或者

  • const_cast inchk.first 表达式去除常量,或者

  • MoreFields 封装在返回非常量引用的 const 限定访问器中。

关于c++ - 通过不影响不变量的集合的非常量迭代器访问成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12202315/

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