函子或布尔比较器
Functor or boolean comparator
我应该使用什么?布尔比较或 sCompare() 仿函数?为什么?
使用这两个选项之间有什么区别吗?
struct Dog
{
int m_age{};
int m_weigt{};
};
bool compare(const Dog& a, const Dog& b)
{
return a.m_age > b.m_age;
}
struct sCompare
{
bool operator()(const Dog& a, const Dog& b)
{
return a.m_age > b.m_age;
}
};
int main()
{
vector<Dog> dogs{ Dog{1,20}, Dog{2,10}, Dog{3,5}, Dog{10,40} };
//sort(begin(dogs), end(dogs), compare); this
//sort(begin(dogs), end(dogs), sCompare()); or this
return 0;
}
你的两个比较器导致相反的顺序(<
vs >
)。除此之外,最大的区别是您不能在函数内定义函数,但可以在函数内定义类型。此外,lambda 表达式提供了直接的语法来做到这一点:
int main()
{
vector<Dog> dogs{ Dog{1,20}, Dog{2,10}, Dog{3,5}, Dog{10,40} };
sort(begin(dogs), end(dogs), [](const Dog& a,const Dog& b){ return a.m_age < b.m_age;});
// or
auto comp = [](const Dog& a,const Dog& b){ return a.m_age < b.m_age;}
sort(begin(dogs), end(dogs),comp);
}
我应该使用什么?布尔比较或 sCompare() 仿函数?为什么? 使用这两个选项之间有什么区别吗?
struct Dog
{
int m_age{};
int m_weigt{};
};
bool compare(const Dog& a, const Dog& b)
{
return a.m_age > b.m_age;
}
struct sCompare
{
bool operator()(const Dog& a, const Dog& b)
{
return a.m_age > b.m_age;
}
};
int main()
{
vector<Dog> dogs{ Dog{1,20}, Dog{2,10}, Dog{3,5}, Dog{10,40} };
//sort(begin(dogs), end(dogs), compare); this
//sort(begin(dogs), end(dogs), sCompare()); or this
return 0;
}
你的两个比较器导致相反的顺序(<
vs >
)。除此之外,最大的区别是您不能在函数内定义函数,但可以在函数内定义类型。此外,lambda 表达式提供了直接的语法来做到这一点:
int main()
{
vector<Dog> dogs{ Dog{1,20}, Dog{2,10}, Dog{3,5}, Dog{10,40} };
sort(begin(dogs), end(dogs), [](const Dog& a,const Dog& b){ return a.m_age < b.m_age;});
// or
auto comp = [](const Dog& a,const Dog& b){ return a.m_age < b.m_age;}
sort(begin(dogs), end(dogs),comp);
}