#include <iostream>
#include <set>
template <typename C>
int insert_get_index(C& container, typename C::value_type value)
{
typename C::iterator it = container.insert(value).first;
return std::distance(container.begin(), it);
}
int main()
{
int a = 3, b = 1, c = 9;
std::set<int*> set;
std::cout << insert_get_index(set, &a) << "\n";
std::cout << insert_get_index(set, &b) << "\n";
std::cout << insert_get_index(set, &c) << "\n";
std::cout << insert_get_index(set, &a) << "\n";
std::cout << insert_get_index(set, &b) << "\n";
std::cout << insert_get_index(set, &c) << "\n";
return 0;
}
CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHNldD4KCnRlbXBsYXRlIDx0eXBlbmFtZSBDPgppbnQgaW5zZXJ0X2dldF9pbmRleChDJiBjb250YWluZXIsIHR5cGVuYW1lIEM6OnZhbHVlX3R5cGUgdmFsdWUpCnsKCXR5cGVuYW1lIEM6Oml0ZXJhdG9yIGl0ID0gY29udGFpbmVyLmluc2VydCh2YWx1ZSkuZmlyc3Q7CglyZXR1cm4gc3RkOjpkaXN0YW5jZShjb250YWluZXIuYmVnaW4oKSwgaXQpOwp9CgppbnQgbWFpbigpCnsKCWludCBhID0gMywgYiA9IDEsIGMgPSA5OwoJc3RkOjpzZXQ8aW50Kj4gc2V0OwoJCglzdGQ6OmNvdXQgPDwgaW5zZXJ0X2dldF9pbmRleChzZXQsICZhKSA8PCAiXG4iOwoJc3RkOjpjb3V0IDw8IGluc2VydF9nZXRfaW5kZXgoc2V0LCAmYikgPDwgIlxuIjsKCXN0ZDo6Y291dCA8PCBpbnNlcnRfZ2V0X2luZGV4KHNldCwgJmMpIDw8ICJcbiI7CglzdGQ6OmNvdXQgPDwgaW5zZXJ0X2dldF9pbmRleChzZXQsICZhKSA8PCAiXG4iOwoJc3RkOjpjb3V0IDw8IGluc2VydF9nZXRfaW5kZXgoc2V0LCAmYikgPDwgIlxuIjsKCXN0ZDo6Y291dCA8PCBpbnNlcnRfZ2V0X2luZGV4KHNldCwgJmMpIDw8ICJcbiI7CgkKCXJldHVybiAwOwp9Cg==