为了实现二叉搜索树,我想知道为什么在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
的任何其他用法都有相同的原因:强制执行不可变性。
出于同样的原因,std::map
容器也存储std::pair
。