#include <iostream>
#include <map>
#include <set>
using namespace std;
struct shape {
int x;
};
int main() {
cout.setf(std::ios::boolalpha);
shape arr[6] = {{1},{2},{3},{4},{5},{6}}; // some shapes
map<shape*,set<shape*> > c; // although would consider smart pointers
c[&arr[0]].insert(&arr[1]);
c[&arr[1]].insert(&arr[0]);
cout << "Shape 1 collides with 0: " << (bool)c[&arr[1]].count(&arr[0]) <<endl;
cout << "Shape 1 collides with 2: " << (bool)c[&arr[1]].count(&arr[2]) <<endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8c2V0Pgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IHNoYXBlIHsKCQoJaW50IHg7Cn07CgoKCmludCBtYWluKCkgewoJY291dC5zZXRmKHN0ZDo6aW9zOjpib29sYWxwaGEpOwoJc2hhcGUgYXJyWzZdID0ge3sxfSx7Mn0sezN9LHs0fSx7NX0sezZ9fTsgLy8gc29tZSBzaGFwZXMKCW1hcDxzaGFwZSosc2V0PHNoYXBlKj4gPiBjOyAvLyBhbHRob3VnaCB3b3VsZCBjb25zaWRlciBzbWFydCBwb2ludGVycwoJY1smYXJyWzBdXS5pbnNlcnQoJmFyclsxXSk7CgljWyZhcnJbMV1dLmluc2VydCgmYXJyWzBdKTsKCQoJY291dCA8PCAiU2hhcGUgMSBjb2xsaWRlcyB3aXRoIDA6ICIgPDwgCShib29sKWNbJmFyclsxXV0uY291bnQoJmFyclswXSkgPDxlbmRsOwoJY291dCA8PCAiU2hhcGUgMSBjb2xsaWRlcyB3aXRoIDI6ICIgPDwgCShib29sKWNbJmFyclsxXV0uY291bnQoJmFyclsyXSkgPDxlbmRsOwoJcmV0dXJuIDA7Cn0=