#include <iostream>
#include <map>
#include <tuple>
using namespace std;
int main() {
std::map<std::pair<int,int>, int> m{
{ {1,1}, 11 },
{ {1,2}, 12 },
{ {2,2}, 22 },
{ {2,4}, 24 },
{ {3,5}, 35 }
};
cout << "Simple search: "<<std::endl;
auto r1 = m.find ({1,2});
if (r1!=m.end()) {
std::cout<<"Found r1 -> "<< r1->second << std::endl;
}
else std::cout<<"r1 not found !"<<std::endl;
cout << "Range search: "<<std::endl;
auto r2 = m.equal_range ({1,2});
if (r2.first!=m.end()) {
std::cout<<"Found range1 -> "<< r2.first->second << std::endl;
}
if (r2.second!=m.end()) {
std::cout<<"Found range2 -> "<< r2.second->second << std::endl;
}
//attention the r2.first==r2.second if exact value not found.
cout << "Flexibilized range search: "<<std::endl;
int x=2;
auto r3 = m.equal_range ({x,0});
for (auto r=r3.first; r!=m.end() && r->first.first==x; r++) {
std::cout<<"In range -> "<< r->second << std::endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8dHVwbGU+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpIHsKCQogICAgc3RkOjptYXA8c3RkOjpwYWlyPGludCxpbnQ+LCAgaW50PiBtewogICAgICAgIHsgezEsMX0sIDExIH0sCiAgICAgICAgeyB7MSwyfSwgMTIgfSwKICAgICAgICB7IHsyLDJ9LCAyMiB9LAogICAgICAgIHsgezIsNH0sIDI0IH0sIAogICAgICAgIHsgezMsNX0sIDM1IH0KICAgIH07CgogICAgY291dCA8PCAiU2ltcGxlIHNlYXJjaDogIjw8c3RkOjplbmRsOwogICAgYXV0byByMSA9IG0uZmluZCAoezEsMn0pOwogICAgaWYgKHIxIT1tLmVuZCgpKSB7CiAgICAgICAgc3RkOjpjb3V0PDwiRm91bmQgcjEgLT4gIjw8IHIxLT5zZWNvbmQgPDwgc3RkOjplbmRsOwogICAgfQogICAgZWxzZSBzdGQ6OmNvdXQ8PCJyMSBub3QgZm91bmQgISI8PHN0ZDo6ZW5kbDsKCiAgICBjb3V0IDw8ICJSYW5nZSBzZWFyY2g6ICI8PHN0ZDo6ZW5kbDsKICAgIGF1dG8gcjIgPSBtLmVxdWFsX3JhbmdlICh7MSwyfSk7CiAgICBpZiAocjIuZmlyc3QhPW0uZW5kKCkpIHsKICAgICAgICBzdGQ6OmNvdXQ8PCJGb3VuZCByYW5nZTEgLT4gIjw8IHIyLmZpcnN0LT5zZWNvbmQgPDwgc3RkOjplbmRsOwogICAgfQogICAgaWYgKHIyLnNlY29uZCE9bS5lbmQoKSkgewogICAgICAgIHN0ZDo6Y291dDw8IkZvdW5kIHJhbmdlMiAtPiAiPDwgcjIuc2Vjb25kLT5zZWNvbmQgPDwgc3RkOjplbmRsOwogICAgfQogICAgLy9hdHRlbnRpb24gdGhlIHIyLmZpcnN0PT1yMi5zZWNvbmQgaWYgZXhhY3QgdmFsdWUgbm90IGZvdW5kLiAKCiAgICBjb3V0IDw8ICJGbGV4aWJpbGl6ZWQgcmFuZ2Ugc2VhcmNoOiAiPDxzdGQ6OmVuZGw7CiAgICBpbnQgeD0yOyAKICAgIGF1dG8gcjMgPSBtLmVxdWFsX3JhbmdlICh7eCwwfSk7CiAgICBmb3IgKGF1dG8gcj1yMy5maXJzdDsgciE9bS5lbmQoKSAmJiByLT5maXJzdC5maXJzdD09eDsgcisrKSB7CiAgICAgICAgc3RkOjpjb3V0PDwiSW4gcmFuZ2UgLT4gIjw8IHItPnNlY29uZCA8PCBzdGQ6OmVuZGw7CiAgICB9CiAKICAgIHJldHVybiAwOwp9