我有一个结构数组,在这个结构中我有一个包含玩家名字的字符串变量。我想只用它们的FIRST字符对这些名字进行排序。
我曾尝试使用>
和<
运算符,但我无法正常使用它。我也无法访问任何C++11
内容。
void sort(player * player_array, num_players){
string sorted[num_players];
for(int i = 0; i < num_players; i++){
if(player_array[i].name > player_array[i+1].name){
sorted += player_array[i+1].name;
}
}
}
答案 0 :(得分:0)
在我看来,你的算法是错误的。尝试制作一些示例并手动运行它们。 请尝试使用此代码:
#include <algorithm>
bool comp(string a, string b)
{
return a[0] < b[0];
}
void sort(player *player_array, num_players)
{
string sorted[num_players];
for (int i = 0; i < num_players; ++i)
sorted[i] = player_array[i].name;
std::sort(sorted, sorted + num_players, comp);
}
此解决方案使用std :: sort,因此复杂度为O(n log n)。但由于您只按第一个字符对名称进行排序,因此可以使用计数排序将其优化为O(n)。