SHARE
TWEET

Untitled

a guest Mar 14th, 2013 31 Never
  1. template<typename it>
  2. it yourUnique(it begin, it end){
  3.     typedef typename std::iterator_traits<it>::value_type value_t;
  4.     typedef std::pair<value_t,int> pair_t;
  5.  
  6.     vector<pair_t> v;
  7.     for(it c = begin; c != end; ++c){
  8.         v.push_back(make_pair(*c, v.size())); // second is start index;
  9.     }
  10.     sort(v.begin(), v.end()); // sort by value then by index
  11.     v.erase(unique(v.begin(), v.end(), firstEqual<value_t>), v.end());
  12.     sort(v.begin(), v.end(), bySecond<value_t>); // restore order.
  13.     it c = begin;
  14.  
  15.     for(const auto& x: v){
  16.        *(c++) = x.first;
  17.     }
  18.     return c;
  19. }
RAW Paste Data
Top