c++ - 在对字符串进行排序时在 C++ 中使用 sort()

标签 c++ arrays sorting c++14

我正在解决一个问题,QuestionsLink ,我们得到一个名字和一个整数。您必须打印三个具有最大整数值的名称。

因此,我将数字转换为字符串并将其连接在名称之前。排序后,我得到了想要的结果。但它失败了一些测试用例,这让我对 c++ 中的排序函数如何工作感到好奇。

这是我的代码:

#include <bits/stdc++.h>
#define ll long long int

using namespace std;

int main() {

  ll n;
  cin >> n;

  string names[n];
  int arr[n], digits[n];

  for (int i = 0; i < n; i++) {
    cin >> names[i] >> arr[i];
    names[i] = to_string(arr[i]) + names[i];
  }

  for (int i = 0; i < n; i++) {
    digits[i] = floor(log10(arr[i]) + 1);
  }

  sort(names, names + n, greater<string>());

  for (int i = 0; i < n; i++) {
    cout << names[i] << endl;
  }
  /*for(int i=0;i<3;i++){
     string s = names[i].substr(digits[i],names[i].length());
     cout<<s<<endl;
   }
   cout<<digits[98];
 */
  return 0;
}

测试用例:
9huDmy
995YnAYoAEE
990RUTM
96ipORo
956LNjFa 

因此,在按降序排序后,9huDmy 如何在顶部,而接下来的两个则根据它们前面的数字进行排序。

最佳答案

因为greater<string>根据 ASCII 值将数字排序为小于字符。

你一开始就不应该把它们串联起来。

1) 使用std::pair< int, std::string >对整数和字符串进行分组。

2) 使用std::vector< std::pair< int, std::string > > ,而不是 C 数组。

3) 编写一个比较器仿函数(或 lambda),根据它们的 int 值对对进行排序。比较 std::pair自动比较他们的.first元素,即你的整数值。

4) 使用详细 std:: , 或 using std::string等等,而不是 using namespace ... ,因为您的全局命名空间会很快变得非常拥挤。

关于c++ - 在对字符串进行排序时在 C++ 中使用 sort(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60365956/

相关文章:

c++ - 访问全局数组比作为参数传递更有效?

c++ - 一次读入一个字符

javascript - 使用 Object.prototype.toString 时有哪些边界情况?

java - 如何在java中实现具有可编程维数的快速多维数组?

java - 给定 +ve 个整数数组,找出在 O(n) 时间和常数空间中出现奇数次的数字。

algorithm - 重新排序列表的元素,以便连续的元素彼此成功?

algorithm - 并行排序算法的好选择来实现作为家庭作业?

C++17 if constexpr() 与元组一起使用

c++ - 头文件和库有什么区别?

algorithm - 对由小数点分隔的可变长度整数列表进行排序