将_back推入哈希地图类中的向量
push_back into vector within hash map class
我正在尝试使用以下主体来测试我修改的哈希图类。
#include <iostream>
#include "HashMap.h"
using namespace std;
int main(){
HashMap<int,vector<string>> hash(20);
vector<string> vec;
cout<<"Inserting item... ";
if(hash.insert(2)){
cout<<"successful. ";
hash.find(2).push_back("word ");
hash.find(2).push_back("is ");
hash.find(2).push_back("pushed ");
hash.find(2).push_back("back. ");
hash.find(2).push_back("yes!n");
} else {
cout<<" unsuccessful.";
return 0;
}
vec = hash.find(2);
for(auto& words: vec)
cout<< words<<endl;;
return 0;
}
循环的决赛没有打印任何东西。
find
函数的定义是这样的:
Data find(const Key& key) { return array[findPos( key )].data_; }
其中 Data
是哈希图类类中的第二个模板变量。我进行了几个测试,即使使用push_back
,find
也会返回空向量。这是为什么?我该怎么做才能将项目推入向量?
问题是您的 find
函数返回数据结构中值的 copy 。具体来说,
Data find(const Key& key) { return array[findPos( key )].data_; }
返回 Data
value ,也就是说,编译器将返回语句中的值复制到函数调用的本地变量。即,每个呼叫hash.find(2)
的呼叫都给空置矢量提供新的副本。然后,您要修改新创建的空矢量。push_back
完成后,由于没有限制的lvalue,矢量将被破坏。这是一个临时。
将功能修改为:
Data& find(const Key& key) { return array[findPos( key )].data_; }
将完成您想要的工作,因为它将返回参考到内部数据结构。请注意,这样做有一些相关的危险。这使得同时访问更难检测,允许用户获得可能无效的参考(例如,如果调整array
大小),并且通常会违反封装。但是,如果您要制作具有可变值的哈希地图,这是要走的。
相关文章:
- 通过关键点向量从地图中获取地图
- C++带有标准::地图的向量?
- 如何遍历地图向量
- C++使用以向量作为值的地图
- 将空初始化器列表分配给现有向量或地图的效果
- 持有地图引用地图向量
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- 如何获取地图中向量的第二个值?
- unordered_maps的向量,在地图中搜索太慢
- 向量映射作为实例成员的C 地图
- 在向量内打印地图
- 地图中地图中的向量
- 获取地图值作为向量的最佳方法是什么
- 在C 中实现地图向量
- 更新存储在地图中的向量的向量
- 将对向量对矢量转换为哈希表 /地图
- 了解C 中的地图和向量的TypeId.name()输出
- 如何通过向量/地图对对象使用多个指针
- C 地图向量参考错误
- 在地图中使用字符串向量