【问题标题】:Using sort() for descending instead of ascending C++使用 sort() 进行降序而不是升序 C++
【发布时间】:2015-05-20 20:15:02
【问题描述】:

我正在尝试对二维数组的给定行或列进行排序。我的代码可以升序排序,但不能降序排序。

void sortArray(int arr[12][12], int index, int row)
{
   if (row == 0)
   {
       sort( arr[index] , arr[index] + 12);
   }
   else 
   {
       int tempArr[12];
       getColArr(arr, tempArr, index);
       sort(tempArr, tempArr + 12);
       for (int i = 0; i < 12; i++)
       {
           arr[i][0] = tempArr[i];
       }
   }
}

如何将其改为降序?

【问题讨论】:

标签: c++ arrays sorting


【解决方案1】:

使用std::greater作为std::sort的第三个参数

std::sort(begin(vec), end(vec),std::greater<int>());

仅供参考..当您使用不带第三个参数的std::sort 时,第三个参数默认为std::less

【讨论】:

    【解决方案2】:

    你可以使用反向迭代器rbegin和rend,例如:

    int main()
    {
        int vec[6] {1,2,3,4,5,6};
        sort(rbegin(vec), rend(vec));
    
        for (const auto &i : vec) 
            cout << i << " ";
    }
    

    输出:6 5 4 3 2 1

    或者您可以使用 lambda 作为排序的第三个参数:

    int vec[6] = {1,2,3,4,5,6};
    sort(vec, vec+6, [](int i, int j){return i>j;});
    

    如果您没有支持 C++11 或 C++14 的编译器,您可以创建自己的比较函数并将其作为第三个参数传递给排序:

    bool isGreater(int i, int j)
    {
        return i > j;
    }
    
    int main()
    {
        int vec[6] = {1,2,3,4,5,6};
        sort(vec, vec+6, isGreater);
    
        for (int i = 0; i != 6; ++i)
            cout << vec[i] << " ";
    }
    

    输出:6 5 4 3 2 1

    【讨论】:

      【解决方案3】:

      使用 排序(arr[index],arr[index] + 12,std::greater());

      插入

      sort( arr[index] , arr[index] + 12);
      

      升序排序;

      //Sorts the elements in the range [first,last) into ascending order.
      std::sort(tempArr, tempArr + 12); // default sort
      

      对于降序,

      //you can use the comparator, the third argument in sort()
      std::sort(tempArr, tempArr + 12, std::greater<int>());
      

      更多信息,请参考http://www.cplusplus.com/reference/algorithm/sort/

      【讨论】:

        【解决方案4】:

        sort 只能升序排序...但您可以选择升序的含义。

        如果告诉sortxy是升序当且仅当x &gt; y,那么排序后的序列会按照operator &gt;升序排列,和按照operator &lt;降序排列。

        您可以编写自己的自定义函子来执行此操作或使用 lambda,但标准库已经为此目的提供了函子:

        using std::sort;
        sort(begin(arr), end(arr), std::greater<int>());
        

        在 C++14 中,您应该使用 std::greater&lt;&gt; 而不是 std::greater&lt;int&gt;

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-12-02
          • 2020-09-02
          • 2021-01-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-08-30
          相关资源
          最近更新 更多