我有一个问题。我写这个比较器:
bool cmp(int a, int b)
{
return __gcd(a, b) > 1;
}
,例如:
如果我有这些数字:
2 5 6 7 8 12 15 19 20
我的代码输出:
20 15 12 8 6 2 5 7 19
没关系..
但是例如:
1 2 3 4 5 6 7 8 9
我的代码输出
1 2 3 4 5 6 7 8 9
我该怎么做?
这个序列应该是这样的:
9 6 3 (...)
答案 0 :(得分:2)
您的比较器未建立strict weak ordering,因此结果未定义。
要制作合适的比较器,必须确保以下情况属实:
public async void registerpushid(string id, string platform, string handle)
{
try
{
RegistrationDescription registration = null;
switch (platform.ToLower())
{
case "mpns":
registration = new MpnsRegistrationDescription(handle);
break;
case "wns":
registration = new WindowsRegistrationDescription(handle);
break;
case "apns":
registration = new AppleRegistrationDescription(handle);
break;
case "gcm":
registration = new GcmRegistrationDescription(handle);
break;
}
registration.RegistrationId = id;
registration.Tags = new HashSet<string>();
registration.Tags.Add(handle);
registration.Tags.Add("yourcustometag");
try
{
await hub.CreateOrUpdateRegistrationAsync(registration);
}
catch (MessagingException e)
{
}
}
catch (Exception ex)
{
}
- 您的比较器未通过cmp(a, a) == false
cmp(2, 2)
- 您的比较器未通过cmp(a, b) == true → cmp(b, a) == false
cmp(2, 4)
- 您的比较器未通过cmp(a, b) == true and cmp(b, c) == true → cmp(a, c) == true