gpt4 book ai didi

c++ - C++中各种自定义比较器函数之间的区别

转载 作者:搜寻专家 更新时间:2023-10-31 02:15:30 24 4
gpt4 key购买 nike

我发现有多种方法可以为用户定义的对象定义自定义比较函数。我想知道在选择一个之前我应该​​考虑的事情。

如果我有学生对象,我可以通过以下方式编写自定义比较函数。

struct Student
{
string name;
uint32_t age;

// Method 1: Using operator <
bool operator<(const Student& ob)
{
return age < ob.age;
}
};

// Method 2: Custom Compare Function
bool compStudent(const Student& a, const Student& b)
{
return a.age < b.age;
}

// Method 3: Using operator ()
struct MyStudComp
{
bool operator() (const Student& a, const Student& b)
{
return a.age < b.age;
}
}obComp;

要对学生 vector 进行排序,我可以使用以下任一方法。

vector<Student> studs; // Consider I have this object populated
std::sort(studs.begin(), studs.end()); // Method 1
std::sort(studs.begin(), studs.end(), compStudent); // Method 2
std::sort(studs.begin(), studs.end(), obComp); // Method 3

// Method 4: Using Lambda
sort(studs.begin(), studs.end(),
[](const Student& a, const Student& b) -> bool
{
return a.age < b.age;
});

这些方法有何不同,我应该如何在这些方法之间做出选择。提前致谢。

最佳答案

不同方法之间的性能差别不大,但是,使用 <将使您更加灵活,并使使用内置函数更加容易。我也认为使用 ()有点奇怪。

你的例子中更大的问题是你的方法应该使用常量引用而不是值。 IE。 bool operator<(Student ob)可能是 friend bool operator<(const Student& ls, const Student& rs){...} .另请参阅 here有关重载运算符时要考虑的不同事项的一些示例。

关于c++ - C++中各种自定义比较器函数之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38422886/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com