说我将元组定义如下:
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