Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;使用'排序;调整';比较函子_C++_Sorting_C++11_Std - Fatal编程技术网

C++ C++;使用'排序;调整';比较函子

C++ C++;使用'排序;调整';比较函子,c++,sorting,c++11,std,C++,Sorting,C++11,Std,我有一个类函子(太复杂了,无法作为lambda实现),但为了简化这个概念,我想确保函子满足谓词。问题是,我希望所有大于(1)的值都按升序排列,但将(1)的所有值都放在“末尾”-例如,视为“较大”值 e、 例如,{2,2,2,3,3,4,5,6,6,…,1,1,1} 函数对象被实现为一个结构,用于从构造它的(复杂的)对象引用中提取参数,但重要的部分是函数对象中的方法。要简化: bool operator () (unsigned i, unsigned j) { if (i == 1) r

我有一个类函子(太复杂了,无法作为lambda实现),但为了简化这个概念,我想确保函子满足谓词。问题是,我希望所有大于
(1)
的值都按升序排列,但将
(1)
的所有值都放在“末尾”-例如,视为“较大”值

e、 例如,
{2,2,2,3,3,4,5,6,6,…,1,1,1}

函数对象被实现为一个结构,用于从构造它的(复杂的)对象引用中提取参数,但重要的部分是函数对象中的方法。要简化:

bool operator () (unsigned i, unsigned j)
{
    if (i == 1) return false; // (1 >= x)
    if (j == 1) return true;  // (x <= 1)

    return (i < j);
}
bool运算符()(无符号i,无符号j)
{
如果(i==1)返回false;//(1>=x)

如果(j==1)返回true;//(x如果可以定义一个双射运算,其中比较是全序/弱序的,那么就可以了。 对于您的类型(
unsigned
),这只是
-=2
/
+=2

bool operator()(unsigned i, unsigned j) const{
   return (i-2) < (j-2); // usigned will wrap around 0 
}
bool运算符()(无符号i,无符号j)常量{
return(i-2)<(j-2);//usigned将环绕0
}
这也取决于你想用零做什么


这取决于
1-2==std::numeric_limits::max()
,因此当你将
1
x
进行“比较”时,你会得到
std::numeric_limits::max()
,这是
的,即使
x
也是
1
(如果存在这样的话,
0
也是真的).

在我看来写得不错。只要把
1
读成“无限”说服自己。@IgorTandetnik-这是一个非常有用的建议,因为我在比较之前明确地消除了
I=1
j=1
的情况。我不是100%确定的是
compare
谓词的正式定义。嗯,我不确定如何帮助您确信您的谓词是正确的满足他们。@IgorTandetnik-是的。我已经试着根据这个链接写出一些布尔表,这让我基本上可以确定。我想我只是想问一些我可能错过的情况。这是一个启发——我相信,即使
x=1
,条件仍然会按需要计算为
false
。注意:这是我会把
0
放在
1
之前(原始帖子没有指明
0
去哪里)@M.M.是的,OP在评论中说“没有零”。他后来删除了评论。这就是我为什么写“这也取决于你想用零做什么。”@M.M-很抱歉,删除注释是一个错误,但是@alfC对我之前的no
(0)
值声明是正确的。