如何使用单独类的属性对向量进行std::排序
How to std::sort a vector using a property of a separate class
我有一个节点类,具有整数属性时间和std::vector<Node*> queue
,其中有很多节点。我想使用std::sort
函数按时间排序队列,但我不确定如何做到这一点。我知道开头是std::sort(queue.begin(), queue.end())
,但我不知道第三个参数
您必须提供自定义比较器。
// 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();
}
这应该工作:)现场演示在这里
请注意,在提出问题之前,请查阅参考资料。这里有一个自定义比较器的例子
如果你的编译器支持c++ 14,那么你可以简单地写
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; } );
或
std::sort( queue.begin(), queue.end(),
[]( const Node * &n1, const Node * &n2 ) { return n1->Time < n2->Time; } );
如果你的编译器不支持当前的c++标准,那么你可以简单地定义一个函数
bool TimeComare(const Node *n1, const Node *n2 )
{
return n1->Time < n2->Time;
}
并像
那样调用算法std::sort( queue.begin(), queue.end(), TimeCompare );
相关文章:
- std::向量与传递值的动态数组
- 如何在旧c++中初始化const-std向量
- 如何检查两个 std::向量在小于 O(n) 的时间复杂度内是否相等
- 当键值是 std 向量时,为什么使用 at in C++ 访问映射值如此缓慢?
- 如何初始化 std::向量的映射?
- 迭代时将指向differents类型的指针保存在std::向量中
- std::向量迭代器和调整大小/保留的奇怪/有趣行为
- yaml-cpp到std::向量迭代的怪异行为
- 故意泄漏std::向量的内存
- 调整STD ::向量的大小是否可以降低其能力
- std ::向量距离函数如何给出比.size()更高的值
- C++ std::向量插入两个元素替代算法失败
- 错误:数字常数之前的预期无限制ID:std :: array和std ::向量大小分配
- 在我提供的此示例中,如何将2维std ::向量的逻辑更改为具有向量[row] [col] [col] [col] [co
- GUI滑块的动态数量,该数量更新具有回调中值的std ::向量
- 是一个std ::向量线程,我的目的是安全的
- 将具有std ::向量的C 函数称为Julia的输入和输出参数
- 将std ::向量作为指针参考
- STD ::向量如何调整其内部缓冲区大小
- 在C 中,是否有可能在不兼容类型的std ::向量对象之间传输不同类型的缓冲区