fork download
  1. #include <iostream>
  2. #include <string>
  3. #include <map>
  4. #include <functional>
  5.  
  6.  
  7. struct assoc_find_type {
  8.  
  9. template<typename AssocContainer>
  10. auto operator ()(AssocContainer & container) const
  11. -> decltype(std::bind(assoc_find_type{}, std::ref(container), std::placeholders::_1)) {
  12. return std::bind(assoc_find_type{}, std::ref(container), std::placeholders::_1);
  13. }
  14.  
  15. template<typename AssocContainer>
  16. typename AssocContainer::iterator
  17. operator ()(AssocContainer & container, typename AssocContainer::key_type const& key) const {
  18. return container.find(key);
  19. }
  20.  
  21. template<typename AssocContainer>
  22. typename AssocContainer::const_iterator
  23. operator ()(AssocContainer const& container, typename AssocContainer::key_type const& key) const {
  24. return container.find(key);
  25. }
  26. };
  27.  
  28. constexpr assoc_find_type assoc_find;
  29.  
  30.  
  31. int main()
  32. {
  33. using map_t = std::map<std::string, int>;
  34. map_t map { {"A", 10}, {"B", 11}, {"C", 12}, {"D", 13}, {"E", 14}, {"F", 15} };
  35.  
  36. auto f = assoc_find(map);
  37. f("A")->second = 42;
  38.  
  39. auto u = assoc_find(map);
  40. std::cout << u("A")->second << std::endl;
  41.  
  42. return 0;
  43. }
Success #stdin #stdout 0s 3476KB
stdin
Standard input is empty
stdout
42