假设我有这样的代码:
#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 不会影响任何不变量或不会做任何事情来使集合中元素的顺序无效?
如果唯一的办法是使用另一个容器,例如向量,我如何在排序位置插入一个新值,同时检查一个是否已经存在?