#include <iostream>
#include <utility>
#include <map>
#include <list>
struct Asteroid {};
typedef std::list<Asteroid> list_t;
typedef list_t::iterator iter_t;
typedef std::pair<iter_t, iter_t> pair_t;
struct Comp {
bool operator()(const pair_t& p1, const pair_t& p2) const {
return &*p1.first < &*p2.first ? true :
&*p2.first < &*p1.first ? false :
&*p1.second < &*p2.second; // won't handle the end iterators!
}
};
int main()
{
list_t l;
l.push_back(Asteroid());
l.push_back(Asteroid());
l.push_back(Asteroid());
std::map<pair_t, double, Comp> m;
m[make_pair(l.begin(), l.begin())] = 3.14;
m[make_pair(l.begin(), std::next(l.begin()))] = 3.14;
m[make_pair(l.begin(), l.begin())] = 3.14;
std::cout << "Map has " << m.size() << " elements\n";
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dXRpbGl0eT4KI2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPGxpc3Q+CnN0cnVjdCBBc3Rlcm9pZCB7fTsKdHlwZWRlZiBzdGQ6Omxpc3Q8QXN0ZXJvaWQ+IGxpc3RfdDsKdHlwZWRlZiBsaXN0X3Q6Oml0ZXJhdG9yIGl0ZXJfdDsKdHlwZWRlZiBzdGQ6OnBhaXI8aXRlcl90LCBpdGVyX3Q+IHBhaXJfdDsKc3RydWN0IENvbXAgewogICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHBhaXJfdCYgcDEsIGNvbnN0IHBhaXJfdCYgcDIpIGNvbnN0IHsgCiAgICAgICAgICAgcmV0dXJuICYqcDEuZmlyc3QgPCAmKnAyLmZpcnN0ID8gdHJ1ZSA6IAogICAgICAgICAgICAgICAgICAmKnAyLmZpcnN0IDwgJipwMS5maXJzdCA/IGZhbHNlIDogCiAgICAgICAgICAgICAgICAgICYqcDEuc2Vjb25kIDwgJipwMi5zZWNvbmQ7IC8vIHdvbid0IGhhbmRsZSB0aGUgZW5kIGl0ZXJhdG9ycyEKICAgIH0KfTsKaW50IG1haW4oKQp7CiAgICBsaXN0X3QgbDsKICAgIGwucHVzaF9iYWNrKEFzdGVyb2lkKCkpOwogICAgbC5wdXNoX2JhY2soQXN0ZXJvaWQoKSk7CiAgICBsLnB1c2hfYmFjayhBc3Rlcm9pZCgpKTsKCiAgICBzdGQ6Om1hcDxwYWlyX3QsIGRvdWJsZSwgQ29tcD4gbTsKICAgIG1bbWFrZV9wYWlyKGwuYmVnaW4oKSwgbC5iZWdpbigpKV0gPSAzLjE0OwogICAgbVttYWtlX3BhaXIobC5iZWdpbigpLCBzdGQ6Om5leHQobC5iZWdpbigpKSldID0gMy4xNDsKICAgIG1bbWFrZV9wYWlyKGwuYmVnaW4oKSwgbC5iZWdpbigpKV0gPSAzLjE0OwoKICAgIHN0ZDo6Y291dCA8PCAiTWFwIGhhcyAiIDw8IG0uc2l6ZSgpIDw8ICIgZWxlbWVudHNcbiI7Cn0=