如何转换set <obj,function =“”>来设置<obj>

时间:2017-11-10 00:18:18

标签: c++ function set

我有一个名为people的容器类,它存储一组person对象。 人们将std :: function作为set参数之一。 这用于定义自定义比较器以对集合进行排序。

可以隐藏

set<Person, std::function<bool(const Person &p1, const Person &p2)>>

set<Person>

该课程的简化版本如下

class People
{   
public :
    People() : people(compareByName()) {}
    void addPerson(Person p);
    set<Person> getPeople();

private:
    using PeopleSet = set<Person, std::function<bool(const Person &p1, const Person &p2)>>; // std::function for comparator type
    PeopleSet people;
};

set<Person> People::getPeople()
{
    return People;//Error Here (No sutable user defined conversion)
}

我希望让人们返回set<Person>,但我不确定如何。

2 个答案:

答案 0 :(得分:4)

最简单的方法是:

set<Person> People::getPeople()
{
    set<Person> reordered_set(original_set.begin(), original_set.end());
    return reordered_set;
}

在这种情况下,您可以通过复制原始集合中的元素来创建全新的set<Person>。我不确定你是否可以复制或不复制。

答案 1 :(得分:1)

好的,我只是通过创建一个新的集合并在每个循环中添加所有内容来完成它。

set<Person> People::getPeople()
{
    set<Person> peeps;
    for (Person const &p : people)
    {
        peeps.insert(p);
    }
    return peeps;
}