#include <iostream>
#include <list>
#include <vector>
#include <utility>
#include <cassert>
#include <algorithm>
using namespace std;
struct Object {
int id;
};
int main()
{
list<Object> objectList;
list<int> idList;
assert( objectList.size() == idList.size() );
std::vector<std::pair<int,Object>> wrapper( idList.size() );
auto idList_it = std::begin( idList );
auto objectList_it = std::begin( objectList );
for( auto& e: wrapper )
e = std::make_pair( *idList_it++, *objectList_it++ );
std::sort( wrapper.begin(), wrapper.end(),
[](const std::pair<int,Object>& a, const std::pair<int,Object>& b) -> bool
{ return a.first<b.first; }
);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bGlzdD4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPHV0aWxpdHk+CiNpbmNsdWRlIDxjYXNzZXJ0PgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBPYmplY3QgewogICAgaW50IGlkOwp9OwoKaW50IG1haW4oKQp7CglsaXN0PE9iamVjdD4gb2JqZWN0TGlzdDsKCWxpc3Q8aW50PiAgICBpZExpc3Q7CgoJYXNzZXJ0KCBvYmplY3RMaXN0LnNpemUoKSA9PSBpZExpc3Quc2l6ZSgpICk7CglzdGQ6OnZlY3RvcjxzdGQ6OnBhaXI8aW50LE9iamVjdD4+IHdyYXBwZXIoIGlkTGlzdC5zaXplKCkgKTsKCWF1dG8gaWRMaXN0X2l0ICAgICA9IHN0ZDo6YmVnaW4oIGlkTGlzdCApOwoJYXV0byBvYmplY3RMaXN0X2l0ID0gc3RkOjpiZWdpbiggb2JqZWN0TGlzdCApOwoJZm9yKCBhdXRvJiBlOiB3cmFwcGVyICkKICAgIAllID0gc3RkOjptYWtlX3BhaXIoICppZExpc3RfaXQrKywgKm9iamVjdExpc3RfaXQrKyApOwogICAKCXN0ZDo6c29ydCggd3JhcHBlci5iZWdpbigpLCB3cmFwcGVyLmVuZCgpLAoJICAgW10oY29uc3Qgc3RkOjpwYWlyPGludCxPYmplY3Q+JiBhLCBjb25zdCBzdGQ6OnBhaXI8aW50LE9iamVjdD4mIGIpIC0+IGJvb2wKCSAgIHsgcmV0dXJuIGEuZmlyc3Q8Yi5maXJzdDsgfQoJKTsKCglyZXR1cm4gMDsKfQ==