为什么Rust HashMap不允许插入带“quot”的值;没有为结构“HashMap”找到名为“insert”的方法;

为什么Rust HashMap不允许插入带“quot”的值;没有为结构“HashMap”找到名为“insert”的方法;,rust,hashmap,Rust,Hashmap,我有一个用空的HashMap(节点类型)创建的结构。此hashmap将由用户添加值 当我尝试在创建后使用fn set\u node\u赔率向hashmap添加键和值时,它不建议使用insert关键字(据我所知)将键插入hashmap的主要方式 为什么我不能向结构中包含的哈希映射添加值 use std::collections::HashMap; //The possible node types pub(crate) enum node_type { Kernel, LSTM,

我有一个用空的
HashMap
节点类型
)创建的结构。此hashmap将由用户添加值

当我尝试在创建后使用
fn set\u node\u赔率
向hashmap添加键和值时,它不建议使用
insert
关键字(据我所知)将键插入hashmap的主要方式

为什么我不能向结构中包含的哈希映射添加值

use std::collections::HashMap;

//The possible node types
pub(crate) enum node_type {
    Kernel,
    LSTM,
    Perceptron,
}

//The possible activation types
pub(crate) enum activation_type {
    Binary,
    Linear,
    Sigmoid,
    Tan,
}

//The constructor that holds the seed values for the Mesh Networks.
pub(crate) struct constructor {
    node_type_default: node_type,
    node_type_odds: HashMap<node_type, f32>,
    activation_type: activation_type,
}

impl constructor {
    //Set the default node and initialize default values
    pub(crate) fn new() -> constructor {
        constructor {
            node_type_default: node_type::Perceptron,
            node_type_odds: HashMap::new(),
            activation_type: activation_type::Sigmoid,
        }
    }

    //Set the default node to a custom value
    pub(crate) fn set_default_node(&mut self, default_node: node_type) {
        self.node_type_default = default_node;
    }

    //Set the odds of each type of node to appear
    pub(crate) fn set_node_odds(&mut self, Type: node_type, Value: f32) {
        **//Here I attempt to insert a value with the key of type and a value of X.
  //Insert is not suggested however.**

        //THIS CODE SNIPPET DOES NOT WORK AS INSERT IS NOT SUGGESTED, IT IS HOWEVER THE INTENDED RESULT
        self.node_type_odds.insert(Type, Value);
    }
}
使用std::collections::HashMap;
//可能的节点类型
发布(板条箱)枚举节点类型{
内核
LSTM,
感知器,
}
//可能的激活类型
发布(板条箱)枚举激活类型{
二元的,
线性的
乙状结肠,
棕褐色的
}
//保存网格网络种子值的构造函数。
发布(板条箱)结构构造函数{
节点类型默认值:节点类型,
节点类型概率:HashMap,
激活类型:激活类型,
}
impl构造函数{
//设置默认节点并初始化默认值
pub(板条箱)fn new()->构造函数{
建造师{
节点类型默认值:节点类型::感知器,
节点类型:HashMap::new(),
激活类型:激活类型::Sigmoid,
}
}
//将默认节点设置为自定义值
发布(板条箱)fn设置\默认\节点(&mut self,默认\节点:节点\类型){
self.node\u type\u default=默认\u节点;
}
//设置每种类型节点出现的几率
发布(板条箱)fn集合\节点\赔率(&mut self,类型:节点\类型,值:f32){
**//在这里,我尝试插入一个键为type、值为X的值。
//但是,不建议插入**
//此代码段不起作用,因为不建议插入,但它是预期的结果
self.node\u type\u bits.insert(类型、值);
}
}
error[E0599]:在当前作用域中找不到结构`std::collections::HashMap`的名为`insert`的方法
-->src/constructor.rs:45:29
|
4 |发布(板条箱)枚举节点|类型{
| -------------------------
| |
|不满足“构造函数::节点类型:std::cmp::Eq”`
|不满足“构造函数::节点类型:std::哈希::哈希”`
...
45 | self.node_type_bits.insert(node_type::Perceptron,3为f32);
|^std::collections::HashMap中找不到方法`
|
=注意:方法“insert”存在,但未满足以下特征界限:
`构造函数::节点类型:std::cmp::Eq`
`构造函数::节点类型:std::哈希::哈希`

顺便说一句,惯用的Rust使用
snake\u case
表示变量、方法、宏、字段和模块;
UpperCamelCase
表示类型和枚举变量;
snake\u case
表示静态和常量。您需要在
节点类型
上实现
Eq
哈希
,否则哈希映射将被禁用基本上没用。看起来您的问题可能由的答案回答。如果没有,请您的问题解释差异。否则,我们可以将此问题标记为已回答。编译器的错误消息实际上会告诉您这就是问题所在。哈希映射的键类型需要实现这些特性。如果您需要我们e、 比如说,
String
i32
作为键类型,您不需要实现这些trait,因为它们已经实现了。如果您想使用自定义类型作为散列图的键类型,您需要自己实现这些trait,但大多数情况下,您可以简单地派生它们。顺便说一句,惯用的Rust使用snake\u case;类型和枚举变量的
UpperCamelCase
;静态和常量的
snake\u case
。您需要在
节点类型
上实现
Eq
哈希
,否则哈希映射基本上是无用的。它看起来像您的问题答案可能是。如果不是,请您的问题解释差异。否则,我们可以将此问题标记为已回答。编译器发出的错误消息实际上会告诉您这就是问题所在。哈希映射的键类型需要实现这些特征。如果您使用,例如,
String
i32
作为键类型,您不需要实现这些trait,因为它们已经实现。如果您想使用自定义类型作为哈希映射的键类型,您需要自己实现trait,但大多数情况下,您可以简单地派生它们。