将文件内容存储到unordered_map中,仅存储最后的项目和值

问题描述 投票:0回答:1

我正在尝试从文件中读取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;
}
c++ unordered-map stringstream
1个回答
0
投票

我的猜测是您的源数据中有双键。如果是这种情况,则您选择了错误的容器类型。

如果要存储所有不同的值,则应使用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";
}

请检查。如前所述,有很多猜测。 。 。

(所有代码都未经编译和测试)

© www.soinside.com 2019 - 2024. All rights reserved.