[C ++具有const变量的按字母顺序对结构的排序向量

问题描述 投票:-1回答:3

你好,我想知道是否可以做这样的事情? // 谢谢 ! :)

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;
  
}
c++ sorting struct const
3个回答
1
投票

我完全同意@ 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;

}

0
投票

正如@Deepak Tatyaji Ahire和@Ulrich Eckhardt所说,您无法执行在代码中编写的内容。


-1
投票

[AFAIK,没有定义比较器就无法直接比较结构的方法。

© www.soinside.com 2019 - 2024. All rights reserved.