提问者:小点点

在cpp中对std::pair使用常量


为了实现二叉搜索树,我想知道为什么在std::pair中把Const放在K之前?

template<class K,class V>
class BST {
public:
    class Node {
    public:
        pair<const K, V> data; // pair < data_type1, data_type2 > Pair_name;
        unique_ptr<Node> left;   // Create a unique_ptr object through raw pointer
        unique_ptr<Node> right;
        unique_ptr<Node> parent; 

        Node(const K& k, const V& v): //constructor
        data{std::move(k),std::move(v)}, right(nullptr),left(nullptr),parent(nullptr)
        {
        }
        ~Node() noexcept = default;


共1个答案

匿名用户

因为从逻辑上讲,数据结构中的节点键必须是不可变的:不受变化的影响。 这是为了保持适当的结构布局,这取决于相对顺序(按键!) 节点的。

如果节点需要重命名,则需要部署更高级别的算法。

当然,在您的代码片段中甚至没有尝试修改键的代码--为什么会有呢? 它无法编译! -但是如果有人忘记并试图这样做,那么在编译时将常量放在那里就会强制执行。 因此,这与const的任何其他用法都有相同的原因:强制执行不可变性。

出于同样的原因,std::map容器也存储std::pair