#include <iostream>
#include <algorithm>
#include <vector>

struct cmp_subset
{
    std::vector<int> vorder;
    
    cmp_subset(const std::vector<int>& order)
    {
        vorder.resize(order.size());
        for (int i=0; i<order.size(); ++i)
            vorder.at(order[i]) = i;
    }
    
    bool operator()(int lhs, int rhs) const
    {
        return vorder[lhs] < vorder[rhs];
    }
};

int main()
{
    std::vector<int> order = {5, 0, 4, 3, 2, 1, 7, 6};
    std::vector<int> subset = {0, 1, 2, 5};

    for (auto x : subset)
        std::cout << x << ' ';
    std::cout << '\n';

    std::sort(subset.begin(), subset.end(), cmp_subset(order));
    
    for (auto x : subset)
        std::cout << x << ' ';
    std::cout << '\n';

    return 0;
}
////////////////////////////////////////////////////////////////////////////////
