... новый ответ на очень старый вопрос, но существующий ответ упускает простое решение из C ++ 11 ...
C ++ 11 решение
C ++ 11 и выше предоставляет std::tuple<T...>
, который вы можете использовать для хранения ваших данных. tuple
s имеют соответствующий operator<
, который сначала сравнивает крайний левый элемент, затем работает вдоль кортежа, пока результат не станет ясным. Это подходит для обеспечения строгого слабого порядка , ожидаемого, например, 1016 *. std::set
и std::map
.
Если у вас есть данные в некоторых других переменных (например, в полях struct
), вы даже можете использовать std::tie()
, чтобы создать кортеж ссылок , который затем может сравнивать с другим таким кортежем. Это позволяет легко писать operator<
для определенных полей данных элемента в определяемом пользователем типе class
/ struct
:
struct My_Struct
{
int a_;
double b_;
std::string c_;
};
bool operator<(const My_Struct& lhs, const My_Struct& rhs)
{
return std::tie(lhs.a_, lhs.b_, lhs.c_) < std::tie(rhs.a_, rhs.b_, rhs.c_);
}