【问题标题】:Using of const for std::pair in c++在 C++ 中使用 const 表示 std::pair
【发布时间】:2020-07-22 12:05:13
【问题描述】:

为了实现二叉搜索树,我想知道为什么我们在 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;

【问题讨论】:

  • 当您希望对象保持不变时,您输入了const?您在问题中所说的“我们”是指谁?
  • 节点在树形结构中的位置取决于k的值。如果您要使用某个键 x 将节点插入现有树,然后将其键更改为 y(不使用 BST 方法),则该节点可能位于不正确的位置。

标签: c++ data-structures stl


【解决方案1】:

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

如果需要重命名节点,则需要部署更高级别的算法才能做到这一点。

当然,您的 sn-p 中没有任何代码可以尝试 修改密钥 — 为什么会有?它不会编译! - 但是如果有人忘记并尝试这样做,则将const 放在那里会在编译时强制执行。因此,这与 const 的任何其他用法的原因相同:强制不变性

std::map 容器也存储std::pair&lt;const K, V&gt;,原因相同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-13
    • 2017-11-16
    • 1970-01-01
    • 2010-11-16
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多