gpt4 book ai didi

c++ - 根据 C++ 中的每个属性之一对结构进行排序

转载 作者:太空狗 更新时间:2023-10-29 23:47:43 24 4
gpt4 key购买 nike

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

public struct Person
{
public string name;
public int age;
}

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

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)); });
}

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

最佳答案

给定 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"));
}

解决方案一

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

int main()
{
/* persons list initialization */
persons.sort(&compareAge);
}

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

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

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

关于c++ - 根据 C++ 中的每个属性之一对结构进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4284132/

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