使用自定义比较功能使用std :: sort()对向量字符串进行排序时遇到问题

Prashant Singh

我正在尝试根据规则对字符串进行排序。C ++代码在大多数情况下均可运行,但在某些情况下会出现错误:

  terminate called after throwing an instance of 'std::logic_error'
  what():  basic_string::_M_construct null not valid

我之前已经看到过此错误,当我们尝试将字符串初始化为null指针或0(在内部转换为null指针)时会发生此错误。我已经检查了排序期间是否发生了错误,并且仅在使用自定义函数进行比较时才发生。再一次,我不知道为什么仅在某些情况下会发生这种情况。

代码是:

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

using std::vector;
using std::string;

bool greater(string a, string b) {
  int i = 0;
  a = a + a[0];
  b = b + b[0];
  while(i<a.size() && i<b.size()) {
    if(a[i] != b[i]) {
      if(a[i] - '0' > b[i] - '0')
      return true;
      else return false;
    }
    i++;
  }
  
}

string largest_number(vector<string> a) {
  std::sort(a.begin(), a.end(), greater);
  std::stringstream ret;
  for (size_t i = 0; i < a.size(); i++) {
    ret << a[i];
  }
  string result;
  ret >> result;
  return result;
}

int main() {
  int n;
  std::cin >> n;
  vector<string> a(n);
  for (size_t i = 0; i < a.size(); i++) {
    std::cin >> a[i];
  }
  std::cout << largest_number(a);
  return 0;
}

出现错误的情况之一是:

100  
2 8 2 3 6 4 1 1 10 6 3 3 6 1 3 8 4 6 1 10 8 4 10 4 1 3 2 3 2 6 1 5 2 9 8 5 10 8 7 9 6 4 2 6 3 8 8 9 8 2 9 10 3 10 7 5 7 1 7 5 1 4 7 6 1 10 5 4 8 4 2 7 8 1 1 7 4 1 1 9 8 6 5 9 9 3 7 6 3 10 8 10 7 2 5 1 1 9 9 5

解决方案:感谢您的帮助。之所以发生错误,是因为比较函数一旦退出循环,就不会返回任何内容。这是有效的更新功能。

bool greater(string a, string b) {
  int i = 0;
  a = a + a[0];
  b = b + b[0];
  while(i<a.size() && i<b.size()) {
      if(a[i] > b[i])
        return true;
    i++;
  }
  return false; 
}
亚瑟·塔卡(Arthur Tacca)

我可以看到的代码唯一的问题(实际上我在一个在线编译器中尝试过,它给了我这个警告)是,greater如果两个字符串相等不会返回任何内容

bool greater(string a, string b) {
  int i = 0;
  a = a;
  b = b;
  while(i<a.size() && i<b.size()) {
    if(a[i] != b[i]) {
      if(a[i] - '0' > b[i] - '0')
      return true;
      else return false;
    }
    i++;
  }
  // <---- what about here?
}

尝试插入一个return语句。(当然,如果两个事物相等,那么两个事物都不大于另一个,因此特别是一个return false你想要的事物。)在没有return语句的情况下掉到函数的末尾未定义的行为(除非int main()或任何返回return的函数void),所以你可能会在发生这种情况时看到任何东西,包括崩溃的类型。

[编辑:正如gst所说,如果一个字符串是另一个字符串的前缀,例如"1"and ,您也可以理解到这一点"10"因此,您需要更多的代码来测试哪个,而不是一个return false但是您可以看到是否有一行可以解决崩溃问题:这在逻辑上是错误的,但至少不是未定义的行为。]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用自定义比较功能进行c ++排序

来自分类Dev

使用日期对数组进行排序时遇到问题

来自分类Dev

使用自定义比较器对字符串NSArray进行排序

来自分类Dev

使用Python中的自定义比较功能对字典键对象列表进行排序

来自分类Dev

使用自定义比较功能按多列对熊猫数据框进行排序

来自分类Dev

使用自定义比较功能按多列对熊猫数据框进行排序

来自分类Dev

尝试使用特定模式对列表进行排序时遇到问题

来自分类Dev

对字符串使用自定义比较器

来自分类Dev

如何仅使用自定义比较器在std :: map中进行搜索?

来自分类Dev

Python:使用自定义比较器对OrderedDict进行排序

来自分类Dev

使用自定义比较器对ArrayList <String>进行排序

来自分类Dev

在字符串向量与字符串指针向量之间进行STL排序的性能比较

来自分类Dev

TreeSet无法使用自定义比较器正确排序

来自分类Dev

绝对值排序,使用自定义比较器

来自分类Dev

使用字符串向量进行插入排序

来自分类Dev

在量角器中使用子字符串时遇到问题

来自分类Dev

使用Aeson解码字符串时遇到问题

来自分类Dev

使用vbscript替换文件中的字符串时遇到问题

来自分类Dev

使用字符串的二叉树,添加节点时遇到问题

来自分类Dev

当前在使用列表、字符串和整数时遇到问题

来自分类Dev

使用自定义排序功能实现树集

来自分类Dev

Lisp-使用自定义功能排序

来自分类Dev

如何使用字符串“ Date”成员对自定义对象的ListArray进行排序

来自分类Dev

使用对象中包含的字符串对自定义对象列表进行排序

来自分类Dev

如何使用自定义功能与vtkplotter进行交互?

来自分类Dev

javascript字符串的自定义排序比较器

来自分类Dev

使用Collections.sort对字符串进行排序?

来自分类Dev

使用<xsl:sort>对部分字符串值进行排序

来自分类Dev

使用Array.sort也对字符串进行排序

Related 相关文章

  1. 1

    使用自定义比较功能进行c ++排序

  2. 2

    使用日期对数组进行排序时遇到问题

  3. 3

    使用自定义比较器对字符串NSArray进行排序

  4. 4

    使用Python中的自定义比较功能对字典键对象列表进行排序

  5. 5

    使用自定义比较功能按多列对熊猫数据框进行排序

  6. 6

    使用自定义比较功能按多列对熊猫数据框进行排序

  7. 7

    尝试使用特定模式对列表进行排序时遇到问题

  8. 8

    对字符串使用自定义比较器

  9. 9

    如何仅使用自定义比较器在std :: map中进行搜索?

  10. 10

    Python:使用自定义比较器对OrderedDict进行排序

  11. 11

    使用自定义比较器对ArrayList <String>进行排序

  12. 12

    在字符串向量与字符串指针向量之间进行STL排序的性能比较

  13. 13

    TreeSet无法使用自定义比较器正确排序

  14. 14

    绝对值排序,使用自定义比较器

  15. 15

    使用字符串向量进行插入排序

  16. 16

    在量角器中使用子字符串时遇到问题

  17. 17

    使用Aeson解码字符串时遇到问题

  18. 18

    使用vbscript替换文件中的字符串时遇到问题

  19. 19

    使用字符串的二叉树,添加节点时遇到问题

  20. 20

    当前在使用列表、字符串和整数时遇到问题

  21. 21

    使用自定义排序功能实现树集

  22. 22

    Lisp-使用自定义功能排序

  23. 23

    如何使用字符串“ Date”成员对自定义对象的ListArray进行排序

  24. 24

    使用对象中包含的字符串对自定义对象列表进行排序

  25. 25

    如何使用自定义功能与vtkplotter进行交互?

  26. 26

    javascript字符串的自定义排序比较器

  27. 27

    使用Collections.sort对字符串进行排序?

  28. 28

    使用<xsl:sort>对部分字符串值进行排序

  29. 29

    使用Array.sort也对字符串进行排序

热门标签

归档