Я пытаюсь использовать сортировку слиянием, чтобы отсортировать все символы в строке.Но у меня всегда возникают проблемы с компиляцией.В частности, у меня проблемы со строками: [if (s [i1] .compare (s [i2]) <0)] и [s [from + j] = b [j];].Любая помощь, пожалуйста? </p>
void mergeSort(string &s, int from, int to)
{
if (from == to)
{
return;
}
int mid = (from + to) / 2;
mergeSort(s, from, mid);
mergeSort(s, mid + 1, to);
merge(s, from, mid, to);
}
void merge(string &s, int from, int mid, int to)
{
int n = to - from + 1;
vector<string> b(n); // merge both halves into a temporary vector b
int i1 = from;
int i2 = mid + 1;
int j = 0;
while (i1 <= mid && i2 <= to)
{
if (s[i1].compare(s[i2]) < 0)
{
b[j] = s[i1];
i1++;
}
else
{
b[j] = s[i2];
i2++;
}
j++;
}
// copy any remaining entries of the first half
while (i1 <= mid)
{
b[j] = s[i1];
i1++;
j++;
}
// copy any remaining entries of the second half
while (i2 <= to)
{
b[j] = s[i2];
i2++;
j++;
}
// copy back from the temporary array
for (j = 0; j < n; j++)
{
s[from + j] = b[j];
}
}
int main(){
string str = "cdebfag"
if (str.length() >= 2 )
mergeSort(str, 0, str.length() - 1);
//print sorted
cout << str << endl;
return 0;
}
Ошибки:
запрос на член 'сравнить' в '(& s) -> std ::__cxx11 :: basic_string :: operator ', который имеет неклассный тип' __gnu_cxx :: __ alloc_traits, char> :: value_type '{aka' char '}
и
неверная инициализация ссылки типа 'std :: __ cxx11 :: string &' {aka 'std :: __ cxx11 :: basic_string &'} из выражения типа 'std :: vector>'