我有一个函数来生成一个单词的所有子序列,我将这些子序列保存在一个结构,字符串数组中。现在我想对每个数组进行排序,最短到最长的子序列。我正在尝试使用STD sort()
,但我无法弄清楚如何在我的情况下使用它。有什么消息吗?
结构和功能
struct palavras{
char palavra[1001];
char final[1001];
string store[1000];
int numero;
}p[1001];
void encontra(const char *s, int n)
{
string str;
int nn=0;
while(*s)
{
int x=0;
while(*(s + x))
{
for(int y = 0; y <= x; y++)
str+=s[y];
p[n].store[nn]=str;
nn+=1;
str.clear();
x++;
}
s++;
}
p[n].numero=nn;
}
答案 0 :(得分:1)
您可以使用std::sort
:
std::vector<std::string> vec{ "a", "abcd", "abc", "ab" };
std::sort(vec.begin(), vec.end(), [](const std::string &s1, const std::string &s2) {return s1.size() < s2.size(); });
答案 1 :(得分:1)
std::sort
有一个版本接受&#34;比较器&#34;,所以你唯一需要做的就是定义一个比较字符串的比较器。
struct compare_length {
bool operator()(const std::string &l, const std::string &r) const {
return l.size()<r.size();
}
};
然后你可以使用这个比较器对你的单词数组进行排序:
std::sort(store, store+n, compare_length());
在C ++ 11中,您甚至可以使用lambda使其成为单行:
std::sort(store, store+n, [](const std::string &l, const std::string &r) { return l.size()<r.size(); });