Я пытаюсь отсортировать массив строк, но он не сортирует ничего...., что я делаю неправильно?
string namesS[MAX_NAMES];
int compare (const void * a, const void * b){
return ( *(char*)a - *(char*)b );
}
void sortNames(){
qsort(namesS, MAX_NAMES, sizeof(string), compare);
}
Это C++, а не C. Сортировка массива строк проста.
#include <string>
#include <vector>
#include <algorithm>
std::vector<std::string> stringarray;
std::sort(stringarray.begin(), stringarray.end());
std :: qsort
унаследован от стандартной библиотеки C. Он не будет работать.
Вам нужно использовать std :: sort
для сортировки строк.
В частности, приведение std :: string
к void *
, а затем к char *
не определено и не будет работать.
алгоритм сортировки в CPP имеет ту же сложность, что и qsort:
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
bool compare(string a, string b){
cout << "compare(" << a << "," << b << ")" << endl;
return (a.compare(b) < 0);
}
int main () {
string mystrs[] = {"www","ggg","bbb","ssss","aaa"};
vector<string> myvector (mystrs, mystrs + 5);
vector<string>::iterator it;
sort (myvector.begin(), myvector.end(), compare);
cout << "vector contains:";
for (it=myvector.begin(); it!=myvector.end(); ++it)
cout << " " << *it;
cout << endl;
return 0;
}