读取文件并将其存储在 unordered_map 中时出现问题
Problem reading file and storing it in unordered_map
我正在尝试读取文件并将其内容存储到 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
中,键是名称,在向量中我们有与名称关联的数字。此外,我希望 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: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);
}
我也试过:
#include <iostream>
#include <unordered_map>
#include <vector>
#include <string>
#include <fstream>
#include <sstream>
int main(int argc, char*[])
{
//1. Read the file and load the map
std::unordered_map<std::string, std::vector<double>> users{};
std::ifstream file{"file.txt"};
std::string line{};
while(std::getline(file, line))
{
std::istringstream iss(line);
std::string key{};
iss >> key;
std::vector<double> values{};
while(iss)
{
double value{0};
if (iss.str() != "NA")
iss >> value;
values.push_back(value);
}
users.insert({key, values});
}
//2. Printing the map
for(auto const &[key, values]: users)
{
std::cout << "Key: " << key << std::endl;
for(auto const value: values)
{
std::cout << value << " ";
}
std::cout << std::endl;
}
return EXIT_SUCCESS;
}
我正在尝试读取文件并将其内容存储到 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
中,键是名称,在向量中我们有与名称关联的数字。此外,我希望 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: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);
}
我也试过:
#include <iostream>
#include <unordered_map>
#include <vector>
#include <string>
#include <fstream>
#include <sstream>
int main(int argc, char*[])
{
//1. Read the file and load the map
std::unordered_map<std::string, std::vector<double>> users{};
std::ifstream file{"file.txt"};
std::string line{};
while(std::getline(file, line))
{
std::istringstream iss(line);
std::string key{};
iss >> key;
std::vector<double> values{};
while(iss)
{
double value{0};
if (iss.str() != "NA")
iss >> value;
values.push_back(value);
}
users.insert({key, values});
}
//2. Printing the map
for(auto const &[key, values]: users)
{
std::cout << "Key: " << key << std::endl;
for(auto const value: values)
{
std::cout << value << " ";
}
std::cout << std::endl;
}
return EXIT_SUCCESS;
}