алгоритм — c ++ находит ту же запись в векторе

У меня есть вектор, который содержит месяц

Jan2013
Jan2013
Jan2013
Jan2014
Jan2014
Jan2014
Jan2014
Feb2014
Feb2014

По сути, я хочу выполнить поиск по вектору для каждой записи, сгруппировать их
вместе как
например

total count for Jan2013 = 3;
total count for Jan2014 = 4;
total count for Feb2014 = 2;

Конечно, как мы знаем, мы можем просто написать несколько, если решить это

        if(monthyear = "Jan2013")  {
//add count
}

if(monthyear = "Jan2014")  {
//add count
}

if(monthyear = "Feb2014")  {
//add count
}

но программист никак не собирается кодировать его таким образом.
Что делать, если до декабря 2014 года будет еще месяц, март2014, апрель2014, май2014
и январь-декабрь-2015 и так далее.

Я не думаю, что я должен принять такой метод жесткого кодирования в
в долгосрочной перспективе и ищет более динамичный подход.

Я не спрашиваю о кодах, а лишь о некоторых шагах и, возможно, даю мне подсказки о том, какие методы c ++ мне следует изучить

заранее спасибо

3

Решение

Ты можешь использовать std::map, Например

std::map<std::string, size_t> m;

for ( const std::string &s : v ) ++m[s];
10

Другие решения

Я бы наверное сделал std::map<monthyear, int>, Для каждого члена вашего вектора увеличьте этот элемент карты.

5

Просто для полноты: решение @VladfromMoscow оптимально для общего случая, когда у вас мало знаний о ваших входных данных. Это из O(N log N) сложность для ввода длины N,

Эквивалентно, вы можете сначала отсортировать ваш вклад в O(N log N)и затем итерации в O(N) над отсортированным вводом и сохранить счет в std::vector<std::pair<std::string, int>>,

Тем не менее, если у вас есть априори информация о диапазоне вашего ввода (скажем, вы знать наверняка он работает с января 2013 года по январь 2014 года), вы также можете напрямую выполнить ввод и обновить предварительно выделенные std::vector<std::pair<std::string, int>> в O(N) сложность.

1
По вопросам рекламы [email protected]