キータイプがあります:
struct KeyT {
uint32_t timestamp;
// example!
uint32_t a;
uint32_t b;
uint32_t c;
uint32_t d;
uint32_t e;
// ...
bool operator== (const KeyT& key) const
{
if(timestamp == key.timestamp && a == key.a && b == key.b && d == key.d && c == key.c && e == key.e)
return true;
return false;
}
bool operator< (const KeyT& key) const
{
if(timestamp < key.timestamp)
return true;
else if(timestamp == key.timestamp && a < key.a && b < key.b && c < key.c && d < key.d && e < key.e)
return true;
else if(timestamp == key.timestamp && a == key.a && b < key.b && c < key.c && d < key.d && e < key.e)
return true;
else if(timestamp == key.timestamp && a == key.a && b == key.b && c < key.c && d < key.d && e < key.e)
return true;
else if(timestamp == key.timestamp && a == key.a && b == key.b && c == key.c && d < key.d && e < key.e)
return true;
else if(timestamp == key.timestamp && a == key.a && b == key.b && c == key.c && d == key.d && e < key.e)
return true;
// ..
return false;
}
};
ここで、メンバー変数 a、b、c、d、e の並べ替えについてはあまり気にしません。確実にしたいのは、マップがタイムスタンプで並べ替えられることだけです。また、「d」以外はすべて同じである KeyT one、two のインスタンスが 2 つある場合、one < two と two < one の両方が false になることにも気付きました。それを修正する唯一の方法は、すべてのメンバー変数のすべての可能な組み合わせの比較を作成することです..明らかに何かが欠けていると確信しています.この場合の最善の解決策は何ですか?
ありがとう!