如何std ::使用单独类的属性对向量进行排序

时间:2015-05-24 17:51:39

标签: c++ sorting vector

我有一个Node类,其中包含一个整数属性Time和一个std::vector<Node*> queue,其中包含很多节点。我想使用std::sort函数按时间排序队列,但是我需要这样做。我不知道该怎么做。我知道开头是std::sort(queue.begin(), queue.end()),但我不知道要为第三个参数添加什么

2 个答案:

答案 0 :(得分:1)

你必须自定义比较器。

// comparator object
struct comparator {
    bool operator()(const Node* node1, const Node* node2) const {
        return node1->getTime() < node2->getTime();
    }
};

std::vector<Node*> nodes;
//...
std::sort(nodes.begin(), nodes.end(), comparator());

// or if you can, use C++11's lambdas
std::sort(nodes.begin(), nodes.end(), [](const Node* node1, const Node* node2) {
    return node1->getTime() < node2->getTime();
}

这应该有效:) Live demo here

建议,在提问之前先查看reference。那里有一个自定义比较器的例子。

答案 1 :(得分:1)

如果您的编译器支持C ++ 14,那么您可以简单地编写

namespace boost
{
    namespace serialization
    {
        template<class Archive>
        inline void load_construct_data(Archive &archive, Foo*a, unsigned int
file_version)
        {
            ::new(a)Foo(0);
        }
    }
}

std::sort( queue.begin(), queue.end(), 
           []( auto n1, auto n2 ) { return n1->Time < n2->Time; } );

否则你应该写

std::sort( queue.begin(), queue.end(), 
           []( const auto &n1, const auto &n2 ) { return n1->Time < n2->Time; } );

std::sort( queue.begin(), queue.end(), 
           []( Node *n1, Node *n2 ) { return n1->Time < n2->Time; } );

如果您的编译器不支持当前的C ++标准,那么您只需定义一个函数

std::sort( queue.begin(), queue.end(), 
           []( const Node * &n1, const Node * &n2 ) { return n1->Time < n2->Time; } );

并调用算法

bool TimeComare(const Node *n1, const Node *n2 )
{
    return n1->Time < n2->Time;
}