gpt4 book ai didi

在容器类中使用自定义比较器的 C++ 排序集

转载 作者:搜寻专家 更新时间:2023-10-31 00:27:55 25 4
gpt4 key购买 nike

我有一个有名字和年龄的 Person 类。

我有一个名为 people 的容器类,用于存储一组人。

我创建了两个自定义比较器来按姓名和年龄排序。

当我在我的类 (People) 中存储包含 Persons 的集合时,如何传递自定义比较器。

例如

我的比较器看起来像这样

struct compareByName
{
bool operator()(const Person & Left, const Person & Right)
{
return (Left.getName() < Right.getName());
}
};

主要是如果我想按名字对一组人进行排序

set<Person, compareByName> peopleByName;

或者对于我的年龄来说

set<Person, compareByAge> peopleByAge;

我遇到问题的地方是如何在人员容器类中使用它我会有类似的东西

class People
{
private:
set<Person, COMPARATOR> m_people;
}

COMPARATOR 可以是姓名或年龄

最佳答案

您可以使用 std::function 作为比较器类型,然后为构造函数提供特定的比较器:

class People
{
using PeopleSet = set<Person, std::function<bool(const Person &p1, const Person &p2 )>>;

People() : people( compareByName() ) {}
void sortByAge();
private:
PeopleSet people;
};

请注意,您不能在创建集合后更改比较器,您必须创建另一个实例:

void People::sortByAge()
{
people = PeopleSet( people.begin(), people.end(), compareByAge() );
}

这将涉及复制或移动整个集合。如果您希望能够同时使用这两种方式,请改用 boost::multi_index

关于在容器类中使用自定义比较器的 C++ 排序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47209421/

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