将func_pointer传递给sort()

时间:2017-09-07 05:19:39

标签: c++

学习将lamda函数指针传递给sort()。

我创建了一个奇怪的比较函数,3比任何东西都大,而其他数字遵循正常的比较规则。

然后我将函数指针传递给带有向量的sort函数。

我期待结果像3,5,4

但实际结果如5,4,3。

请您帮忙解释一下后台发生了什么,以及为什么我的奇怪功能不会影响结果。

int main()
{

    //strange compare function, 3 is larger than anything, whlie other numbers follow normal rule
    auto plarger = [](int a, int b)
    {
        if((a==3) && (b !=3))
        {
            cout<<"i am here"<<endl;
            return true;
        }
        else return a>b;
    };

    vector<int> s { 3, 4, 5 };
    sort(s.begin(), s.end(), plarger);
    for (auto i : s)
    {
        cout << i << endl;
    }

    return 0;
}

2 个答案:

答案 0 :(得分:1)

b为3时,您没有考虑这种情况。使用此作为比较功能。

auto plarger = [](int a, int b)
{
  if ((a == 3) && (b != 3))
  {
    return true;
  }
  else if ((b == 3) && (a != 3))
  {
    return false;
  }
  else return a>b;
};

答案 1 :(得分:0)

我不知道为什么,但我第一次看到a == 4 b == 3,所以你的回归真的永远不会运行。 enter image description here