#ifndef OSRM_GROUP_BY #define OSRM_GROUP_BY #include #include namespace osrm { namespace util { // Runs fn on consecutive items in sub-ranges determined by pred. // // Example: // vector v{1,2,2,2,3,4,4}; // group_by(first, last, even, print); // >>> 2,2,2 // >>> 4,4 // // Note: this mimics Python's itertools.groupby template Fn group_by(Iter first, Iter last, Pred pred, Fn fn) { while (first != last) { first = std::find_if(first, last, pred); auto next = std::find_if_not(first, last, pred); (void)fn(std::make_pair(first, next)); first = next; } return fn; } } // ns util } // ns osrm #endif