Makes it explicit that the header is intended for iterator-based algorithms that can ideally operate on any type.
Makes the header more general for other potential algorithms in the future. While we're at it, include a missing <functional> include to satisfy the use of std::less.