【发布时间】:2018-08-26 22:58:50
【问题描述】:
目标:将数字文本文件读入向量,然后将向量添加到 key,value std::map,以便我以后可以通过我为它们指定的键名引用它们。 p>
认为这很容易,但我很惊讶我已经在 StackOverflow 上找不到这个问题的答案。
预期结果:
Print1 = {100,200,500,600}
Print2 = {7890,5678,34567,3,56}
Print3["NameA"] = Print1
Print3["NameB"] = Print2
如果我的流程效率低下或方向错误,我将不胜感激。
我不断收到语义问题构建失败,并且没有来自 pair <const basic_string> 的可行转换
当前代码:
#include <string.h>
#include <iostream>
#include <map>
#include <utility>
#include <vector>
const std::string& key(const std::pair<std::string, std::string>& keyValue)
{
return keyValue.first;
}
const std::string& value(const std::pair<std::string, std::string>& keyValue)
{
return keyValue.second;
}
int main()
{
std::vector<int> print1;
std::ifstream inputFile("numbers.txt");
// test file open
if (inputFile)
{
double value;
// read the elements in the file into a vector
while ( inputFile >> value ) {
print1.push_back(value);
}
}
inputFile.close();
std::vector<int> print2;
std::ifstream inputFile2("numbers2.txt");
// test file open
if (inputFile2)
{
double value;
// read the elements in the file into a vector
while ( inputFile2 >> value ) {
print2.push_back(value);
}
}
inputFile2.close();
std::map<std::string, std::vector<int>> contacts;
contacts["alice"] = print1;
contacts["bob"] = print2;
std::vector<std::string> keys(contacts.size());
std::vector<int> values(contacts.size());
transform(contacts.begin(), contacts.end(), keys.begin(), key);
transform(contacts.begin(), contacts.end(), values.begin(), value);
std::cout << "Keys:\n";
copy(keys.begin(), keys.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
std::cout << "\n";
std::cout << "Values:\n";
copy(values.begin(), values.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
return 0;
}
【问题讨论】:
-
听起来您的代码无法编译。发布您在编译时遇到问题的一行代码,而不是整个程序。
-
如果你的编译器没有告诉你错误发生在哪一行,把它扔掉,找一个能告诉你的。但是考虑到 Xcode 是一个被很多人使用的严肃工具,我很难相信它会给你一个没有行引用的错误。
-
如果您不知道如何使用 IDE 告诉您行号,请尝试注释掉不同的部分,直到您弄明白为止。
-
@user3152377 究竟是什么,
key(const std::pair<std::string, std::string>& keyValue)和value(const std::pair<std::string, std::string>& keyValue)在您的std::transform中?以及为什么程序无法打开文件;你会不考虑就关闭的,对吧? -
@user3152377 如果您的评论以 it is reading as... 开头是您的编译错误消息,那么请编辑您的原始帖子以添加该文本。这将使您的读者不必通过所有的 cmets 来查找该信息。我对 Xcode 不熟悉,但我猜 2031 是您的行号,而 26 是您在文件 algorithm 中的列号。
标签: c++ key-value ifstream stdvector stdmap