Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <tuple>
- using namespace std;
- struct Date
- {
- int year;
- //int month;
- string month;
- int day;
- };
- // Мы должны хранить объекты в ключах словарей.
- // Поскольоку словарь хранит свои ключи отсортированными, нужно для этого типа определить оператор меньше
- //bool operator <(const Date& lhs, const Date& rhs)
- //{
- // // Если у дат разные года
- // if (lhs.year != rhs.year)
- // {
- // return lhs.year < rhs.year;
- // }
- // // Если у дат одинаковые года, но разные месяцы
- // if (lhs.month != rhs.month)
- // {
- // return lhs.month < rhs.month;
- // }
- // // Сравниваем дни, если все остальное одинаково
- // return lhs.day < rhs.day;
- //}
- //bool operator <(const Date& lhs, const Date& rhs)
- //{
- // return vector<int>{lhs.year, lhs.month, lhs.day} <
- // vector<int>{rhs.year, rhs.month, rhs.day};
- // // Для векторов уже определен (лексикографический) оператор сравнения
- //}
- bool operator <(const Date& lhs, const Date& rhs)
- {
- // Создали кортеж, в котором все поля это ссылки.
- // поэтому строки lhs.month и rhs.month не скопировались внутрь кортежей
- tuple<const int&, const string&, const int&> lhs_key = tie(lhs.year, lhs.month, lhs.day);
- tuple<const int&, const string&, const int&> rhs_key = tie(rhs.year, rhs.month, rhs.day);
- return lhs_key < rhs_key;
- /*return tie(lhs.year, lhs.month, lhs.day) <
- tie(rhs.year, rhs.month, rhs.day);*/
- // Для векторов уже определен (лексикографический) оператор сравнения
- }
- int main()
- {
- cout << (Date{ 2017,"June",8 } < Date{ 2017,"January",26 }) << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement