1

次のようなコードがあるとしましょう:

#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 を記述しても不変条件に影響を与えないこと、またはセット内の要素の順序を無効にするようなことをしないことをコンパイラに保証するにはどうすればよいですか?

ベクトルなどの別のコンテナーを使用することが唯一の手段である場合、既に存在するかどうかを確認しながら、並べ替えられた位置に新しい値を挿入するにはどうすればよいですか?

4

2 に答える 2

4
  • 、またはMoreFieldsとして宣言するmutable

  • const_castinchk.firstconstness を削除する式、または

  • MoreFields非 const 参照を返す const 修飾アクセサー内にカプセル化します。

于 2012-08-30T17:33:02.207 に答える
0

セットの代わりにマップを使用したいと思います。

于 2012-08-30T17:44:37.220 に答える