为地图创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"; }