Я полностью согласен с @ Ulrich Eckhardt.
Вы не можете отсортировать вектор так, как элементы вашего вектора нельзя назначить.
Я думаю, вы, возможно, запутались с использованием const
.
Нет необходимости делать структурные переменные const
. Параметр пользовательской функции сортировки обычно хранится как const
, поскольку он не должен изменяться. Это шаблон, который обеспечивает безопасную практику кодирования.
Кроме того, если вы используете C ++, я бы предложил использовать std :: string вместо char *, так как std :: string является более чистым, более безопасный способ go, поскольку он снимает с программиста бремя управления памятью.
Посмотрите на работающую реализацию без использования const:
#include <string.h>
#include<iostream>
#include<vector>
#include<algorithm>
struct PET
{
std::string name;
int age;
};
bool compare(const struct PET& a, const struct PET& b){
return (a.name.compare(b.name) <= 0) ? true : false;
}
int main(){
std::vector<struct PET> vec(3);
vec[0].name = "dog";
vec[0].age = 3;
vec[1].name = "cat";
vec[1].age = 1;
vec[2].name = "bird";
vec[2].age = 2;
sort(vec.begin(), vec.end(), compare);
for(int i=0;i<3;i++){
std::cout<<vec[i].name<<" "<<vec[i].age<<std::endl;
}
return 0;
}