【发布时间】:2018-05-16 09:23:21
【问题描述】:
我在使用自定义排序字符串时遇到了一点问题。我基本上拥有的是std::pair 的std::list,其元素是enum class 和std::string。 Enum 用于颜色(它们确实排序正确),字符串 包含 [2, 10] 区间内的数字,分别添加字母 J、Q、K 和 A。你可能已经猜到了,这是一副纸牌,排序后一定是这样的:
2、3、4、5、6、7、8、9、10、J、Q、K、A。
为了实现这一点,我的 lambda 函数应该是什么样的?还是有别的办法?
这是我到目前为止所遇到的:
enum class Colours
{
Spades, Clubs, Hearts, Diamonds
};
typedef std::list<std::pair<Colours, std::string>> Deck;
typedef std::pair<Boje, std::string> Pair;
这是实际的排序:
deck.sort( [] (const Pair &x, const Pair &y) -> bool {
if(x.first == y.first) return x.second < y.second;
else return x.first < y.first;
} );
而当前排序结果:10 2 3 4 5 6 7 8 9 A J K Q
【问题讨论】:
-
我刚刚注意到我忘了提供结果,它已被编辑。 10在2之前,字母是A J K Q,但必须是J Q K A。
-
对卡片面也使用枚举是正常的,需要时带有转换函数来转换为字符串
-
我建议以正确的顺序创建一个数组/列表,尝试获取两个元素的索引并比较索引
-
问题可能是您正在比较字符而不是字符串
-
只需使用 char 而不是 std::string 就可以了。