次のようなコードがあるとしましょう:
#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 を記述しても不変条件に影響を与えないこと、またはセット内の要素の順序を無効にするようなことをしないことをコンパイラに保証するにはどうすればよいですか?
ベクトルなどの別のコンテナーを使用することが唯一の手段である場合、既に存在するかどうかを確認しながら、並べ替えられた位置に新しい値を挿入するにはどうすればよいですか?