基于C++中每个属性之一对struct进行排序

oli*_*dev 2 c++

我是Java和C#程序员.最近,我正在研究C++项目.我遇到了如何在C++中编写示例代码的问题.以下示例代码是对结构的属性进行排序:

public struct Person
{
    public string name;
    public int age;
}
Run Code Online (Sandbox Code Playgroud)

将一些人添加到列表中并按年龄排序:

static void main()
{
   List<Person> persons = new List<Person>();

   Person person = new Person();
   person.age = 10;
   person.name = "Jane";

   persons.Add(person);

   person = new Person();
   person.age = 13;
   person.name = "Jack";

   persons.Add(person);

   person = new Person();
   person.age = 12;
   person.name = "Anna";

   persons.Add(person);

   // sort age
   persons.Sort(delegate(Person p1, Person p2) 
   { return p1.age.CompareTo(p2.age); });

   persons.ForEach(delegate(Person p) 
   { Console.WriteLine(String.Format("{0} {1}", p.age, p.name)); });
}
Run Code Online (Sandbox Code Playgroud)

如何在C++中编写等效的示例代码?

ice*_*ime 8

鉴于Person类型:

struct Person
{
    Person(int age_, const std::string &name_)
        : age(age_), name(name_)
    {}

    int age;
    std::string name;
};

int main()
{
    std::list<Person> persons;
    persons.push_back(Person(10, "Jane"));
    persons.push_back(Person(13, "Jack"));
    persons.push_back(Person(12, "Anna"));
}
Run Code Online (Sandbox Code Playgroud)

解决方案1

bool compareAge(const Person &lhs, const Person &rhs)
{
    return lhs.age < rhs.age;
}

int main()
{
    /* persons list initialization */
    persons.sort(&compareAge);
}
Run Code Online (Sandbox Code Playgroud)

解决方案2(使用boost :: bind)

int main()
{
    /* persons list initialization */
    persons.sort(boost::bind(&Person::age, _1) < boost::bind(&Person::age, _2));
}
Run Code Online (Sandbox Code Playgroud)

还有一个使用C++ 0x lambdas的解决方案.