c++ - 指针的排序 vector

标签 c++ sorting vector

我在尝试对指针 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/

相关文章:

c++ - 连接两个std::vector

c++ - C++ 中的标点符号是什么?

c++ - 我们如何将此一维 vector 作为二维 vector 访问

javascript - Chrome 和 Safari javascript .sort() 方法的工作方式不同

iphone - UITableViewController 没有更新内容是我应用手动排序

c++ - begin() 和 rend() 有什么区别?

c++ - 递减结束迭代器

c++ - 使用 boost::any_range 时出现非常量引用错误的无效初始化

c++ - 如何在 GUI 更新之间暂停几秒钟?

c++ - 重写 push_back C++