在C++中,是否可以根据这些对象的任何属性轻松地对对象类型指针的向量进行排序?

kat*_*tas 3 c++ sorting attributes vector

是否可以根据这些对象的任何属性轻松地对对象类型指针的向量进行排序?

比方说students是对象类型指针的载体,当对象student是类型Student,有两个方法student.studentAlias()student.studentName().如何根据别名对向量进行排序?

提前致谢.

Syl*_*sne 13

你可以使用仿函数:

#include <vector>
#include <algorithm>

class StudentAliasComparator
{
public:
    bool operator()(const Student* left, const Student* right) const
    {
        return left->studentAlias() < right->studentAlias();
    }
};

void SortVectorOfStudentByAlias(std::vector<Student*>& students)
{
    std::sort(students.begin(), students.end(), StudentAliasComparator());
}
Run Code Online (Sandbox Code Playgroud)

您也可以使用来自boost或langage的lambda(如果使用C++ 0x).使用C++ 0x语法,它会是这样的(无法检查,因为我现在无法访问支持C++ 0x的C++编译器):

void SortVectorOfStudentByAlias(std::vector<Student*>& students)
{
    std::sort(students.begin(), students.end(),
        [](const Student* l, const Student* r) {
            return l->studentAlias() < r->studentAlias(); })
}
Run Code Online (Sandbox Code Playgroud)


Joh*_*don 5

您可以使用std :: sort算法进行排序:

template <class RandomAccessIterator, class StrictWeakOrdering>
void sort(RandomAccessIterator first, RandomAccessIterator last, StrictWeakOrdering comp);
Run Code Online (Sandbox Code Playgroud)

只需提供一个函数对象(comp),它对您感兴趣的属性执行小于比较.