当将向量设置为一个值时,整个向量会被覆盖
When dereferencing a vector to set a value the entire vector gets overwritten
我正在声明一个向量和基本元素,这实际上意味着插槽在我的标题文件中打开:
template <typename K, typename V>
class Map_Hash
{
private:
vector<KeyValue<K,V>*> *hashTable;
KeyValue<K,V> *baseElt;
}
我在构造函数中实例化:
template <typename K, typename V>
Map_Hash<K,V>::Map_Hash(int M, K baseKey, V baseValue)
{
this->M = M;
baseElt = new KeyValue<K,V>(baseKey, baseValue);
hashTable = new vector<KeyValue<K,V>*>(M, baseElt);
}
现在,当我试图为他们写新价值时,我就是这样做的:
template <typename K, typename V>
void Map_Hash<K,V>::add(K key)
{
KeyValue<K,V> elt(key);
int hashVal = getHashVal(elt);
(*(*hashTable)[hashVal]) = elt;
}
这里还有更多的逻辑来处理桌面上已经存在的价值,但我认为这可能只是拥挤重要的东西。当执行该行(*(*hashTable)[hashVal]) = elt;
时,我的整个向量被elt
覆盖,而我想要的只是我提供的索引。另外,我真的没有意识到的事情,但是我的baseElt
也会被这个值覆盖。我敢肯定,这与我如何处理我对C 的指针有关,因此非常感谢任何帮助。
- 不要使用指针。
- 不要使用
new
。 - 使用构造函数中的初始化列表。
摆脱指针,确保M
和baseElt
在hashTable
之前:
template <typename K, typename V>
class Map_Hash
{
private:
int M;
KeyValue<K,V> baseElt;
vector<KeyValue<K,V>> hashTable;
}
使用构造函数中的初始化列表:
template <typename K, typename V>
Map_Hash<K,V>::Map_Hash(int M, K baseKey, V baseValue) :
M{ M },
baseElt{ baseKey, baseValue },
hashTable{ M, baseElt }
{
}
然后,只需向向量添加一个新值:
template <typename K, typename V>
void Map_Hash<K,V>::add(K key)
{
KeyValue<K,V> elt{ key };
int hashVal = getHashVal(elt);
hashTable[hashVal] = elt; // This will fail if hashVal is too big for the size of your vector!
}
您可能想重命名M
,这是一个严重的名字。我也不确定您为什么要以这种方式构建您的向量。或在创建哈希地图时完全使用一个。在标准中,已经有很多用于将KeyValues与std::unordered_map
这样的哈希存储的容器。总的来说,您的代码都闻起来。
您的问题可能是一个问题。
相关文章:
- 写入向量<向量<bool>>
- 函数向量_指针有不同的原型,我可以构建一个吗
- std::向量与传递值的动态数组
- 将值指定给向量(2D)的向量中的某个位置
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 如何使用向量的template_back函数
- 尝试通过多个向量访问变量时,向量下标超出范围
- 如何通过派生类函数更改基类中的向量
- C++从另一个类访问公共静态向量的正确方法是什么
- 如何将ampl中的集合表示为c++中的向量
- 变量没有改变?通过向量的函数调用
- 迭代时从向量和内存中删除对象
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- 如何识别从不同子类覆盖的向量类?
- 当将向量设置为一个值时,整个向量会被覆盖
- C++将向量插入到另一个覆盖向量中
- 用更大的向量覆盖向量的最有效方法
- 派生类对象覆盖对象向量中的基类函数
- std::vector不会为多个向量条目创建cv::Mat的新引用——初始化矩阵时,数据会被覆盖
- 为了比较两个向量,我应该覆盖哪些运算符