我是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++中编写等效的示例代码?
鉴于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的解决方案.
| 归档时间: |
|
| 查看次数: |
3830 次 |
| 最近记录: |