为地图创build一个自己的比较器

typedef map<string, string> myMap; 

当向myMap插入一个新对时,它将使用该键通过自己的string比较器进行比较。 我不知道我们是否可以重写那个比较器呢? 例如比较键的长度,而不是字母表。 或者无论如何要重新sorting地图。 感谢您的帮助。

std::map最多需要四个模板types参数,第三个是比较器。 例如:

 struct cmpByStringLength { bool operator()(const std::string& a, const std::string& b) const { return a.length() < b.length(); } }; // ... std::map<std::string, std::string, cmpByStringLength> myMap; 

或者,你也可以传递一个比较器来map构造函数 。

但请注意,按长度进行比较时,只能在地图中将每个长度的一个string作为关键字。

是的, map上的第三个模板参数指定了比较器,它是一个二元谓词。 例:

 struct ByLength : public std::binary_function<string, string, bool> { bool operator()(const string& lhs, const string& rhs) const { return lhs.length() < rhs.length(); } }; int main() { typedef map<string, string, ByLength> lenmap; lenmap mymap; mymap["one"] = "one"; mymap["a"] = "a"; mymap["fewbahr"] = "foobar"; for( lenmap::const_iterator it = mymap.begin(), end = mymap.end(); it != end; ++it ) cout << it->first << "\n"; }