说我将元组定义如下:

typedef tuple<string, string> bigram;

我的 map 将元组映射为整数:
map<bigram, int> mymap;

如何定制我的比较器,以便mymap根据bigram中第一个字符串的字母顺序排序?

我在想什么
map<bigram, int, greater<bigrams[0]>> mymap;

最佳答案

第一字母顺序表示您想要less而不是greater。其次,tuple<string, string>的默认排序顺序应该适合您。注意:人们给出的各种建议可能不会满足您的要求。当您可能希望将它们视为不同的对象时,它们都将{"foo", "bar"}{"foo", "baz"}比较为相等。如果要反向排序,则应该可以执行map<bigram, int, std::greater<bigram>>,否则请坚持使用map<bigram, int>

作为引用,元组免费提供的比较运算符的定义:http://en.cppreference.com/w/cpp/utility/tuple/operator_cmp

10-08 08:20