#include <algorithm> // for sort() #include <cstdlib> // for EXIT_SUCCESS #include <iostream> // for std::cout, std::endl #include <memory> // for std::unique_vec #include <vector> // for std::vector using std::unique_ptr; using std::vector; bool sortfunction(const unique_ptr<int> &x, const unique_ptr<int> &y) { return *x < *y; } void printfunction(unique_ptr<int> &x) { std::cout << *x << std::endl; } int main(int argc, char **argv) { vector<unique_ptr<int> > vec; vec.push_back(unique_ptr<int>(new int(9))); vec.push_back(unique_ptr<int>(new int(5))); vec.push_back(unique_ptr<int>(new int(7))); // buggy: sorts based on the values of the ptrs std::sort(vec.begin(), vec.end()); std::cout << "Sorted:" << std::endl; std::for_each(vec.begin(), vec.end(), &printfunction); // better: sorts based on the pointed-to values std::sort(vec.begin(), vec.end(), &sortfunction); std::cout << "Sorted:" << std::endl; std::for_each(vec.begin(), vec.end(), &printfunction); return EXIT_SUCCESS; }