Make map's compare to use const
diff --git a/src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.h b/src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.h
index 8f04272..6e8dd96 100644
--- a/src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.h
+++ b/src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.h
@@ -37,7 +37,7 @@
  public:
   struct Less {
     bool operator()(const RefCountedPtr<XdsLocalityName>& lhs,
-                    const RefCountedPtr<XdsLocalityName>& rhs) {
+                    const RefCountedPtr<XdsLocalityName>& rhs) const {
       int cmp_result = strcmp(lhs->region_.get(), rhs->region_.get());
       if (cmp_result != 0) return cmp_result < 0;
       cmp_result = strcmp(lhs->zone_.get(), rhs->zone_.get());
diff --git a/src/core/lib/gprpp/map.h b/src/core/lib/gprpp/map.h
index d133a89..8f0a261 100644
--- a/src/core/lib/gprpp/map.h
+++ b/src/core/lib/gprpp/map.h
@@ -37,14 +37,15 @@
   bool operator()(const char* a, const char* b) const {
     return strcmp(a, b) < 0;
   }
-  bool operator()(const UniquePtr<char>& k1, const UniquePtr<char>& k2) {
+  bool operator()(const UniquePtr<char>& k1, const UniquePtr<char>& k2) const {
     return strcmp(k1.get(), k2.get()) < 0;
   }
 };
 
 template <typename T>
 struct RefCountedPtrLess {
-  bool operator()(const RefCountedPtr<T>& p1, const RefCountedPtr<T>& p2) {
+  bool operator()(const RefCountedPtr<T>& p1,
+                  const RefCountedPtr<T>& p2) const {
     return p1.get() < p2.get();
   }
 };
@@ -117,7 +118,11 @@
   iterator end() { return iterator(this, nullptr); }
 
   iterator lower_bound(const Key& k) {
-    key_compare compare;
+    // This is a workaround for "const key_compare compare;"
+    // because some versions of compilers cannot build this by requiring
+    // a user-provided constructor. (ref: https://stackoverflow.com/q/7411515)
+    key_compare compare_tmp;
+    const key_compare& compare = compare_tmp;
     return std::find_if(begin(), end(), [&k, &compare](const value_type& v) {
       return !compare(v.first, k);
     });
@@ -448,7 +453,11 @@
 template <class Key, class T, class Compare>
 int Map<Key, T, Compare>::CompareKeys(const key_type& lhs,
                                       const key_type& rhs) {
-  key_compare compare;
+  // This is a workaround for "const key_compare compare;"
+  // because some versions of compilers cannot build this by requiring
+  // a user-provided constructor. (ref: https://stackoverflow.com/q/7411515)
+  key_compare compare_tmp;
+  const key_compare& compare = compare_tmp;
   bool left_comparison = compare(lhs, rhs);
   bool right_comparison = compare(rhs, lhs);
   // Both values are equal