为什么排序不起作用?

时间:2015-07-09 13:43:02

标签: algorithm sorting c++11

错误是: /usr/include/c++/4.8/bits/stl_algo.h:2159:29:错误:来自' int'的无效转换到#char; char *' [-fpermissive]     if(__ comp(* __ i,* __ first))

我正在传递2个字符串X和Y.现在排序应该比较XY和YX,然后返回X,如果XY> YX或返回Y.X和Y将具有类似-33或9999的值。

string Solution::largestNumber(const vector<int> &A) {
int  i,n;
vector<string> B;
string str;
for(i=0; i<A.size(); i++)
{
    B[i]=to_string(A[i]);
}
sort(A.begin(), A.end(),[](const string lhs, const string rhs){
  return rhs+lhs < lhs+rhs;
  });
  for(i=0; i<A.size(); i++)
  {
      str+= to_string(A[i]);
  }
  return str;}

2 个答案:

答案 0 :(得分:1)

您在std::sort的{​​{1}}范围内呼叫A,因此比较功能应该比较std::vector<int> - s。

您最初可以使用0,1,... int填充B,然后给出两个索引A.size()-1i1进行比较,构造字符串并进行比较它们。

答案 1 :(得分:0)

  

错误是:/usr/include/c++/4.8/bits/stl_algo.h:2159:29: error: invalid conversion from 'int' to 'const char*' [-fpermissive] if (__comp(*__i, *__first))

sort(A.begin(), A.end(),[](const string lhs, const string rhs){...});

您的sort比较器希望比较两个std::stringA的元素类型为int。您创建了B以将A的元素转换为B的元素类型std::string。使用B

其他说明:

string Solution::largestNumber(const vector<int> &A) {
    int  i,n;                    // n???
    // vector<string> B;         // B is empty.  Calling B[i] will cause a
                                 // segfault for attempting to access memory
                                 // out of bounds.
    vector<string> B(A.size());  // Fix: pass in the size.  Now creates B 
                                 // with size elements that can be accessed. 
    string str;
    // Consider using algorithms like std::transform
    for(i=0; i<A.size(); i++)
    {
        B[i]=to_string(A[i]);    // You won't segfault here now.
    }
    // Corrected your sort.
    sort(B.begin(), B.end(),[](const string lhs, const string rhs){
        return rhs+lhs < lhs+rhs;
    });  
    // Appending should be done on the sorted string vector. Consider using
    // a ranged-based for loop here.
    for(i=0; i<B.size(); i++)
    {
        str+= B[i];
    }
    return str;
}