我正在尝试从文件中读取2000个键和值对,并将它们存储到unordered_map中。当前它似乎可以正常工作,唯一的事情是它仅将最后200个左右存储到地图中。我认为键和项已被覆盖,因为地图没有重新哈希化或沿这些线移动。
std::unordered_map<std::string, std::string> myMap;
std::ifstream infile;
infile.open("Text3m.txt");
std::string key;
std::string item;
if (infile.is_open())
{
std::string line;
while (std::getline(infile, line))
{
std::stringstream ss(line);
std::getline(ss, key, ',');
std::getline(ss, item);
myMap[key] = item;
//std::cout << key << ", " << item << std::endl;
//std::cout << key << ", " << item << std::endl;
}
}
for (auto const& n : myMap)
{
std::cout << n.first << ", " << n.second << std::endl;
}
我的猜测是您的源数据中有双键。如果是这种情况,则您选择了错误的容器类型。
如果要存储所有不同的值,则应使用std::unordered_multimap
或std :: multimap。但是,您也可以使用std::vector<std::pair<std::string,std::string>>
。
再次猜测,您想存储密钥和该密钥的所有找到的值。然后,您需要使用std::unordered_map<std::string,std::vector<std::string>>
。要添加值,您可以输入
myMap[key].push_back[item];
并且对于输出类似
for (auto const& n : myMap)
{
std::cout << n.first << " --> " ;
std::copy(n.second.begin(),n.second.end(),std::ostream_iterator<std::string>(std::cout," "));
std::cout << "\n";
}
请检查。如前所述,有很多猜测。 。 。
(所有代码都未经编译和测试)