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