我在尝试对指针 vector 进行排序时遇到了一点麻烦。
这是我到目前为止所做的:
class Node
{
private:
vector <Node*> _children;
string _data;
...
public:
void Node::add_child(Node* child)
{
...
sort(_children.begin(), _children.end());
}
bool Node::operator<(const Node& node)
{
return (this->_data.compare(node._data) == -1);
}
};
如果我这样写,我的小于运算符可以工作:
Node* root = new Node("abc");
Node* n = new Node("def");
cout << (*root<*n) << endl;
为什么 sort 从不调用操作符?任何帮助,将不胜感激! 谢谢。
疯子
最佳答案
因为您对指针值进行排序,而不是它们指向的 Node
。
您可以使用 std::sort
的第三个参数指定自定义比较器的算法。
例如:
bool comparePtrToNode(Node* a, Node* b) { return (*a < *b); }
std::sort(_children.begin(), _children.end(), comparePtrToNode);
(请注意,此代码只是一个指示 - 您必须在需要时添加额外的安全检查)
关于c++ - 指针的排序 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7446743/