eli*_*eli 1 c++ stl data-structures
为了实现二叉搜索树,我在徘徊为什么我们在 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;
Run Code Online (Sandbox Code Playgroud)
因为,从逻辑上讲,数据结构中的节点键必须是不可变的:不受变化影响。这是为了保持适当的结构布局,这取决于节点的相对顺序(按键!)。
如果需要重命名节点,则需要部署更高级别的算法才能做到这一点。
当然,您的代码段中没有代码甚至会尝试修改密钥——为什么会有呢?它不会编译!- 但是const如果有人忘记并尝试这样做,则在编译时将其放在那里会强制执行。因此,它的原因与const: enforcing immutability 的任何其他用法相同。
std::mapstd::pair<const K, V>出于同样的原因,容器也存储。