你好,我想知道是否可以做这样的事情? // 谢谢 ! :)
struct PET
{
const char* pet;
const int age;
};
bool Sort(const PET& first, const PET& second)
{
return first.pet < second.pet;
}
void Foo(const std::vector<PET> pets)
{
std::sort(pets.begin(), pets.end(), Sort); /* Does not work */
std::cout << pets[0].pet;
std::cout << pets[0].age;
}
我完全同意@ Ulrich Eckhardt。
您不能对向量进行排序,因为向量的元素不可分配。
[我认为,您可能对const
的使用感到困惑。
无需设置结构变量const
。自定义排序功能的参数通常保持为const
,因为它们不可修改。这是确保安全编码实践的模式。
此外,如果您使用的是C ++,我建议使用std :: string代替char *,因为std :: string是一种更干净,更安全的方法,因为它消除了程序员的内存管理负担。] >
不使用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;
}
正如@Deepak Tatyaji Ahire和@Ulrich Eckhardt所说,您无法执行在代码中编写的内容。
[AFAIK,没有定义比较器就无法直接比较结构的方法。