c++ - 读取文件并将其存储在 unordered_map 中时出现问题

标签 c++ unordered-map istringstream

我正在尝试读取文件并将其内容存储到 unordered_map 中,但遇到了一些问题。这是我的unordered_map:

std::unordered_map<std::string, std::vector<double>> _users;

这是我要读取的文件的内容:

Mike 4 NA 8 NA NA
Lena NA 8 4 NA 9

我想以名称为键的方式将内容存储在 _users 中,并且在 vector 中我们有与名称关联的数字。此外,我希望 NA 等于 0。 所以我设法做到了这一点:

while ( std::getline(file, line))
    {
        std::istringstream iss(line);
        std::string key;
        double value;
        iss >> key;
        dict[key] = std::vector<double>();

        while (iss >> value)
        {
            dict[key].push_back(value);
        }
    }

但是由于 value 是一个 double,当检查 NA 时,它只是停止 while 循环,我只是得到,例如与 Mike: 迈克4。我该怎么做才能让它读取 NA 并将其作为 0 放入 vector 中?感谢您的帮助!

最佳答案

对于你的内部循环,你可以这样做:

    std::string stringval;
    while (iss >> stringval)
    {
        double value;
        try
        {
            value = std::stod (stringval);
        }
        catch (...)
        {
            value = 0.0;
        }
        dict[key].push_back(value);
    }

关于c++ - 读取文件并将其存储在 unordered_map 中时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62615938/

相关文章:

c++ - C 语言中的 VecDoub 等效项?

c++ - 删除链表的最后一个节点

c++ - 使用 stringstream 打印数字但是当我包括时,例如 1.3067d,但它仍然打印 1.3067

c++ - CPP : Parsing String Stream is too slow

c++ - 读取文件处理 C++ 时出错

c++ - C/C++ 中的内存对齐

c++ - 如何使用现有的哈希整数来索引哈希表?

c++ - std::unordered_map 如何处理冲突?

c++ - 在 C++ 中有一个 HashMap 的复合键

c++ - 在 C++ 中使用 istringstream 时出现 "Off by one error"