【发布时间】:2015-06-22 01:33:18
【问题描述】:
我正在为我的 next_permutation 函数使用自定义比较器函数,但我不明白为什么会出现错误:
Expression: invalid operator<
我希望我的函数至少能在函数体中受到这些限制,但不断出错:
bool mycomp(int i, int j)
{
return (((i < 0) && (j > 0)) || ((i > 0) && (j < 0)));
};
但是当我这样做时,它工作正常:
bool mycomp(int i, int j)
{
return (((i < 0) && (j > 0)));
};
我还想添加另一个限制,但不知道如何。 这里是 next_permutation 函数的相关代码:
int counter, size, *guests;
for (int i = 2; i <= 9; i++)
{
size = i * 2;
counter = 1;
guests = new int[size];
for (int j = 0; j < size; j += 2)
{
guests[j] = counter;
guests[j + 1] = 0 - counter;
++counter;
}
sort(guests, guests + size);
counter = 0;
while (next_permutation(guests, guests + size, mycomp))
{
++counter;
}
}
我也明白有严格的弱排序要求。在阅读了它之后,我理解了它的要点,但不确定它究竟如何适用于这种情况。提前谢谢你。
【问题讨论】:
-
您认为自定义比较器功能有什么作用?您认为使用给定的自定义比较器意味着是什么?你对“限制”的使用对我来说是一个危险信号。
-
使用你的第一个函数没有错误:现场演示:coliru.stacked-crooked.com/a/8abe254b696f6df8
-
@Stephen :它默默地失败了。 OP 有机会获得一个调试断言来检查其比较器的有效性
-
@Yakk 那么我想我不知道自定义比较器的用途。我会试着查一下。在这种情况下,我认为它是用来限制排列以最小化找到的排列数量。
-
@Yakk 自定义比较器在 next_permutation 函数中做了什么?
标签: c++ permutation