fork download
  1. #include <iostream>
  2. #include <set>
  3. #include <vector>
  4.  
  5. struct A
  6. {
  7. int member[10] {1,5,7,2,3,8,4,9,6,0};
  8. std::vector<std::size_t> another_member {5,6,7,8,9,0,1,2,3,4} ;
  9. };
  10.  
  11. template < typename ORDER > struct order_compare
  12. {
  13. order_compare( const ORDER& a ) : order(a) {}
  14.  
  15. bool operator() (const int lhs, const int rhs) const
  16. { return order[lhs] < order[rhs] ; }
  17.  
  18. const ORDER& order ;
  19. };
  20.  
  21. int main()
  22. {
  23. A object ;
  24.  
  25. {
  26. std::set< int, order_compare< int[10] > > s( object.member ) ;
  27. for( int i=0 ; i<10 ; ++i ) s.insert(i);
  28.  
  29. for( int v : s ) std::cout << v << ' ' ;
  30. std::cout << '\n' ;
  31. }
  32.  
  33. {
  34. std::set< int, order_compare< std::vector<std::size_t> > > s( object.another_member ) ;
  35. for( int i=0 ; i<10 ; ++i ) s.insert(i);
  36.  
  37. for( int v : s ) std::cout << v << ' ' ;
  38. std::cout << '\n' ;
  39. }
  40. }
  41.  
Success #stdin #stdout 0s 2988KB
stdin
Standard input is empty
stdout
9 0 3 4 6 1 8 2 5 7 
5 6 7 8 9 0 1 2 3 4