Ваш operator <
нарушает строгое требование слабого порядка, которое требуется std::map
для ключа.Это требует, чтобы, если comp(a,b)
было верно, то comp(b,a)
было бы ложно.Вы используете
bool operator < (const A & rhs) const {
size_t rhsSize = rhs.data.size();
for (size_t i = 0; i < data.size(); i++) {
if (i < rhsSize)
return false;
return true;
}
}
для сравнения элементов, и если мы сравним {70, 8, 9,10}
с {7, 8,9, 9}
, то он вернет true
, а если мы перевернем его, он также вернет true
.Это заставляет карту думать, что элементы равны, и не добавляет второй элемент.
Если вы просто хотите убедиться, что уникальные векторы хранятся на карте, вы можете использовать std::vector
'* * 1015.* в A
operator <
, как
bool operator < (const A & rhs) const {
return data < rhs.data;
}
, и код будет работать правильно.