You can create a template function:
#include <map> #include <iostream> template<typename I> void func(I begin, I end) { int mcount = 0; for (I it = begin; mcount < 10 && it != end; ++it) { ++mcount; std::cout << "[mcount " << mcount << "] " << it->first << ',' << it->second << '\n'; } } int main() { std::multimap<int,int> id_count = { {1,2}, {9, -2}, {1,44}, {2,3}, {3,5}, {7,34} }; for (int valid = 0; valid < 2; ++valid) { std::cout << "valid " << valid << '\n'; if (valid) { func(id_count.rbegin(), id_count.rend()); } else { func(id_count.begin(), id_count.end()); } std::cout << '\n'; } }
But IMHO this solution is a bit complicated, so consider other ways (like placing the loop body in a function).
std::for_each, and pass a generic lambda.std::for_eachwith an additional termination condition? That would probably become quite ugly/inefficientstd::find_if, but that's just a hack.