Какой тип данных я должен использовать в качестве ключа для карты STL? - PullRequest
0 голосов
/ 27 марта 2020

Я создаю программу, которая читает некоторые записи из файла .csv и сохраняет их на карте. Мой ключ должен иметь два атрибута, год и месяц. Но в некоторых случаях меня просят напечатать данные за весь год, и в этом случае у меня не будет возможности ввести месяц (ie month = 0). Так какой тип данных должен быть лучшим в этом случае? Сначала я думал о целых числах, но это не сработало бы, если бы меня попросили напечатать детали за весь год. Я думаю, что возможно использование пользовательского объекта типа будет работать, однако я немного запутался в итерации карты.

1 Ответ

0 голосов
/ 28 марта 2020

Похоже, ваши Month и Year являются двумя независимыми ключами, и что иногда вы ищете неуникальные результаты (например, указан год, месяц не указан). Простое решение - хранить ваши записи в std::map<Year, std::map<Month, std::vector<Records> > my_data; Затем

  • , чтобы получить записи из конкретного Year, вы можете перебрать результат my_data[Year("2020")]
  • , чтобы получить записи из конкретного Month (независимо от Year), for (const auto& el: my_data) doSomething(el.second[Month("September")]); = для получения результатов от конкретных Year и Month my_data[Year("2010")][Month("December")]

Начиная с C ++ 20 вы можете использовать year и месяц из стандартной библиотеки C ++; До этого вы можете просто определить Year и Month структуры и предоставить оператор «меньше чем».

...