#include <iostream>
#include <set>
#include <vector>

struct A
{
    int member[10] {1,5,7,2,3,8,4,9,6,0};
    std::vector<std::size_t> another_member {5,6,7,8,9,0,1,2,3,4} ;
};

template < typename ORDER > struct order_compare
{
    order_compare( const ORDER& a ) : order(a) {}

    bool operator() (const int lhs, const int rhs) const
    { return order[lhs] < order[rhs] ; }

    const ORDER& order ;
};

int main()
{
    A object ;

    {
        std::set< int, order_compare< int[10] > > s( object.member ) ;
        for( int i=0 ; i<10 ; ++i ) s.insert(i);

        for( int v : s ) std::cout << v << ' ' ;
        std::cout << '\n' ;
    }

    {
        std::set< int, order_compare< std::vector<std::size_t> > > s( object.another_member ) ;
        for( int i=0 ; i<10 ; ++i ) s.insert(i);

        for( int v : s ) std::cout << v << ' ' ;
        std::cout << '\n' ;
    }
}
