【发布时间】:2021-09-14 11:35:59
【问题描述】:
我在 cpp 中有一个函数,我想用它来根据每个字符串的单独长度对字符串数组进行排序,我试图将特定索引处元素的长度与驻留在中的元素的长度进行比较下一个索引。如果下一个索引的长度小于第一个索引中字符串的长度,那么我将较短长度的字符串推送到具有较高长度的字符串的索引。我尝试的代码如下所示,我在我的 main 中使用它时遇到问题,编译器生成的错误指出
:[Error] could not convert '{"Mario", "Bowser", "Link"}' from '<brace-enclosed initializer list>' to 'std::vector<std::basic_string<char> >'.
#include <iostream>
#include <ctype.h>
#include <vector>
//below is my sort according to length function
using namespace std;
std::vector<std::string> sortByLength(std::vector<std::string> arr) {
for(int k=0;k<arr.size();k++){
if(arr[k+1].size()<arr[k].size()){
//push the shorter string to the lower index
arr[k]=arr[k+1];
}
}
return arr;
}
//below is the main function
int main(){
//this line below generates compile error
std::vector<string> myarr=sortByLength({"Mario", "Bowser", "Link"})<<endl;
cout<<myarr<<endl;
return 0;
}
【问题讨论】:
-
我不确定
sortByLength做了什么,但它肯定不会对向量进行排序。考虑std::sort。 -
会按照
string length排序吗? -
它可以按照您想要的任何严格的弱排序进行排序。该链接包含三个使用
std::sort的非默认排序标准的示例。 -
std::sort(myarr.begin(), myarr.end(), [](auto& lhs, auto& rhs){ return lhs.size() < rhs.size(); }); -
@JohnFilleau,检查一下