#include <iostream>
#include <string>
#include <map>
#include <functional>
struct assoc_find_type {
template<typename AssocContainer>
typename AssocContainer::iterator
operator ()(AssocContainer & container, typename AssocContainer::key_type const& key) const {
return container.find(key);
}
template<typename AssocContainer>
typename AssocContainer::const_iterator
operator ()(AssocContainer const& container, typename AssocContainer::key_type const& key) const {
return container.find(key);
}
};
constexpr assoc_find_type assoc_find;
int main()
{
using map_t = std::map<std::string, int>;
map_t map { {"A", 10}, {"B", 11}, {"C", 12}, {"D", 13}, {"E", 14}, {"F", 15} };
auto f = std::bind(assoc_find, std::ref(map), std::placeholders::_1);
f("A")->second = 42;
auto u = std::bind(assoc_find, std::cref(map), std::placeholders::_1);
std::cout << u("A")->second << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KCgpzdHJ1Y3QgYXNzb2NfZmluZF90eXBlIHsKCiAgIHRlbXBsYXRlPHR5cGVuYW1lIEFzc29jQ29udGFpbmVyPgogICB0eXBlbmFtZSBBc3NvY0NvbnRhaW5lcjo6aXRlcmF0b3IKICAgb3BlcmF0b3IgKCkoQXNzb2NDb250YWluZXIgJiBjb250YWluZXIsIHR5cGVuYW1lIEFzc29jQ29udGFpbmVyOjprZXlfdHlwZSBjb25zdCYga2V5KSBjb25zdCB7CiAgICAgIHJldHVybiBjb250YWluZXIuZmluZChrZXkpOwogICB9CiAgIAogICB0ZW1wbGF0ZTx0eXBlbmFtZSBBc3NvY0NvbnRhaW5lcj4KICAgdHlwZW5hbWUgQXNzb2NDb250YWluZXI6OmNvbnN0X2l0ZXJhdG9yCiAgIG9wZXJhdG9yICgpKEFzc29jQ29udGFpbmVyIGNvbnN0JiBjb250YWluZXIsIHR5cGVuYW1lIEFzc29jQ29udGFpbmVyOjprZXlfdHlwZSBjb25zdCYga2V5KSBjb25zdCB7CiAgICAgIHJldHVybiBjb250YWluZXIuZmluZChrZXkpOwogICB9Cn07Cgpjb25zdGV4cHIgYXNzb2NfZmluZF90eXBlIGFzc29jX2ZpbmQ7CgoKaW50IG1haW4oKQp7CiAgIHVzaW5nIG1hcF90ID0gc3RkOjptYXA8c3RkOjpzdHJpbmcsIGludD47CiAgIG1hcF90IG1hcCB7IHsiQSIsIDEwfSwgeyJCIiwgMTF9LCB7IkMiLCAxMn0sIHsiRCIsIDEzfSwgeyJFIiwgMTR9LCB7IkYiLCAxNX0gfTsKIAogICBhdXRvIGYgPSBzdGQ6OmJpbmQoYXNzb2NfZmluZCwgc3RkOjpyZWYobWFwKSwgc3RkOjpwbGFjZWhvbGRlcnM6Ol8xKTsKICAgZigiQSIpLT5zZWNvbmQgPSA0MjsKICAgCiAgIGF1dG8gdSA9IHN0ZDo6YmluZChhc3NvY19maW5kLCBzdGQ6OmNyZWYobWFwKSwgc3RkOjpwbGFjZWhvbGRlcnM6Ol8xKTsKICAgc3RkOjpjb3V0IDw8IHUoIkEiKS0+c2Vjb25kIDw8IHN0ZDo6ZW5kbDsKIAogICByZXR1cm4gMDsKfQ==