C++ 如何转换集合<;obj,功能>;设置<;obj>;

C++ 如何转换集合<;obj,功能>;设置<;obj>;,c++,function,set,C++,Function,Set,我有一个名为people的容器类,它存储一组person对象。 人们将std::函数作为设置参数之一。 这用于定义自定义比较器来对集合进行排序 有没有可能从他那里隐匿 set<Person, std::function<bool(const Person &p1, const Person &p2)>> set 到 set 下面是该课程的简化版本 class People { public : People() : people(com

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

有没有可能从他那里隐匿

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

set
下面是该课程的简化版本

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)
}
班级人员
{   
公众:
People():People(compareByName()){}
无效人员(人员p);
设置getPeople();
私人:
使用PeopleSet=set;//比较类型的std::函数
人与人;
};
set People::getPeople()
{
return People;//此处有错误(无可执行的用户定义转换)
}

我想让人们返回一个
集合
,但我不确定如何返回。

好的,我自己创建了一个新集合,并在for each循环中添加了所有内容

set<Person> People::getPeople()
{
    set<Person> peeps;
    for (Person const &p : people)
    {
        peeps.insert(p);
    }
    return peeps;
}
set People::getPeople()
{
设置窥视;
用于(人员const&p:人员)
{
插入(p);
}
返回peeps;
}

好的,我自己创建了一个新的集合,并在for-each循环中添加了所有内容

set<Person> People::getPeople()
{
    set<Person> peeps;
    for (Person const &p : people)
    {
        peeps.insert(p);
    }
    return peeps;
}
set People::getPeople()
{
设置窥视;
用于(人员const&p:人员)
{
插入(p);
}
返回peeps;
}

最简单的方法是:

set<Person> People::getPeople()
{
    set<Person> reordered_set(original_set.begin(), original_set.end());
    return reordered_set;
}
set People::getPeople()
{
集合重新排序的集合(原始集合.begin(),原始集合.end());
返回重新排序的_集;
}

在本例中,通过从原始集合复制元素,您正在创建一个全新的
集合。我不确定您是否同意进行复制。

最简单的方法是:

set<Person> People::getPeople()
{
    set<Person> reordered_set(original_set.begin(), original_set.end());
    return reordered_set;
}
set People::getPeople()
{
集合重新排序的集合(原始集合.begin(),原始集合.end());
返回重新排序的_集;
}

在本例中,通过从原始集合复制元素,您正在创建一个全新的
集合。我不确定您是否同意进行复制。

集合
的第二个类型参数是集合
用来组织自身的排序算法,因此如果您尝试使用不同的排序算法将集合转换为另一种类型的集合(在这种情况下,默认值为
小于
,即
person1
),我不一定希望得到相同的集合-它将以不同的方式排序。这就是您想要做的吗-您希望以不同的方式对相同的集合进行排序吗?是的,我在person类中有一个默认排序,它也将恢复。a
set
的第二个类型参数是
set
用于组织的排序算法ze本身,因此如果您尝试使用不同的排序算法将
集合
转换为另一种类型的
集合
(本例中的默认值为
更少
,即
person1
)我不一定期望得到相同的集合——它会被不同地排序。这就是你想要做的吗?你想要用不同的方式排序同一组吗?是的,我在它的类中也有一个默认的排序,它也会恢复。@ Yakk为什么不是C++?“为什么不是英语?”Yakk为什么不是C++?你混合了一个小的C,因为“Bunjor”不是英语?