簡體   English   中英

在C ++中使用整數排序(自定義用法std :: sort)

[英]Sort by using an integer number in C++ (custom usage of std::sort)

我想要一個首先按數字排序的字符串列表,如果數字等於0,則按字母順序對其進行排序。

假設我有:

struct numberedString{
     string s;
     int n;
}

我有一個數組numberedString a[]如何使用std::sort()對數組中的條目進行std::sort() 我想我首先需要的所有排序numberedString.s由排序,然后numberedString.n ,但我看不出究竟是如何做到這一點?

問你應接受。 干得好。

情況1:專用功能對象-函子。

struct functor
{
  bool operator() (const numberedString& a,
                   const numberedString& b)
  {
    if ((a.n != 0) && (b.n != 0))
    {
       return a.n < b.n;
    }
    return a.s < b.s;
  }
};

情況2:結構中的重載運算符<。

struct numberedString
{
  string s;
  int n;
  bool operator<(const numberedString& other) const
  {
    if ((n != 0) && (other.n != 0))
    {
       return n < other.n;
    }
    return s < other.s;
  }
};

用法:
重載operator<允許函數自然比較您的結構實例:

  numberedString c, d;
  if (c < d)
  {
    cout << "c < d\n";
  }
  else
  {
    cout << "c >= d\n";
  }

該函子允許您將比較算法傳遞給諸如std::sort排序函數:

   numberedString array[25];
   std::sort(&array[0], &array[25], functor);  

注意:有關確切語法,請參見std :: sort。

順便說一句,當一個變量的數量為零而另一個變量沒有為零時,有哪些規則呢?

基本上,您的結構非常瑣碎,可以將其替換為std::pair

using numberedString = std::pair<int, std::string>;

然后,您可以按常規方式使用std::sort ,並且由於使用std::pair字典比較,您將獲得所需的效果,簡單而無需定義自定義比較器(以下示例):

#include <iostream>
#include <utility>
#include <vector>
#include <string>
#include <algorithm>

using numberedString = std::pair<int, std::string>;

int main() {
  numberedString vec1[] = {{4, "four"}, {2, "two"}, {1, "one"}};
  std::sort(std::begin(vec1), std::end(vec1));
  for(auto &&i : vec1) std::cout << i.first << " -- " << i.second << '\n';
  std::cout << std::endl;

  numberedString vec2[] = {{0, "four"}, {0, "two"}, {0, "one"}};
  std::sort(std::begin(vec2), std::end(vec2));
  for(auto &&i : vec2) std::cout << i.first << " -- " << i.second << '\n';
}

現場演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM