item: m)''', где m - '''map <int, vector<string>>'''. как в этом цикле сделать проверку на последний элемент словаря? я пробовал '''if(item != m.end())'''или'''if(item != m.back())''' но ничего не выходит.
перебирай итераторы, по твоему циклу нельзя понять где там последний элемент
std::map<int, std::vector<std::string>> map{{3, {}}, {1, {}}, {2, {}}}; const auto prev_back = std::prev(std::end(map)); for(auto it = std::begin(map); it != std::end(map); ++it) { if(it == prev_back) { std::cout << it->first << '\n'; } }
maps.find(key)==prev(maps.end());
мотивируй пожалуйста.
искать по мапе элемент, чтобы убедиться, что он последний? это лишний оверхед на пустом месте
ну вариант в rbegin уже был выше озвучен. я предложил другой - без цикла )
вариант с rbegin() работает всегда за O(1) - и в цикле, и вне цикла, твой же всегда работает через полноценный поиск
Там код ещё в цикле есть, мне чисто /n до последнего расставить
тогда тебе надо итерироваться по итераторам
я так и думал, собственно. это решается вообще без проверок: const char* delim = ""; for (const auto& ... : ...) { std::cout << delim; delim = "\n"; // логика }
а если обобщать, то fmt::join + ranges
Мне на последнем не нужен переход.
так и будет - перед каждым элементом, кроме первого, будет \n
я просто поменял логику с "после последнего не писать \n" на "перед первым не писать \n", но результат получится одинаковым
Легче всего просто завести ещё одну переменную, и ПОСЛЕ ЦИКЛА обработать последний элемент как тебее надо
Обсуждают сегодня