我有一个文本文件,
猫莫莉 狗本吉 鸟查理(等)
在另一个文本文件中,“有一天猫出去躺在阳光下 - 狗已经在花园里......”(等等......)
我应该用它的名字替换动物。目前我正在阅读文件并将动物类型放在一个向量中,将动物名称放在另一个向量中。我的问题是 - 我是否需要将它们放在一个结构中,以便当我循环并找到 cat 时,我可以找到相关的名称 - 或者我是否使用另一种方法。我听说过多维向量,但我觉得它可能超出了我的想象,因为我对编程很陌生。
我有一个文本文件,
猫莫莉 狗本吉 鸟查理(等)
在另一个文本文件中,“有一天猫出去躺在阳光下 - 狗已经在花园里......”(等等......)
我应该用它的名字替换动物。目前我正在阅读文件并将动物类型放在一个向量中,将动物名称放在另一个向量中。我的问题是 - 我是否需要将它们放在一个结构中,以便当我循环并找到 cat 时,我可以找到相关的名称 - 或者我是否使用另一种方法。我听说过多维向量,但我觉得它可能超出了我的想象,因为我对编程很陌生。
似乎最适合您使用的结构是地图。它将允许您将动物与名称相关联,并轻松有效地查找动物的名称。
试试这个:
std::map<std::string, std::string> animal_names;
第一个模板类型是键类型,第二个是值类型。在您的情况下,键是动物,值是名称。
然后,您可以插入与此的关联:
animal_names["cat"] = "molly";
非常简单!请注意,如果您现在遍历地图,您将按动物顺序获得它们。那就是"bird"
先来,然后"cat"
,然后"dog"
。
如果您根本不关心订单,则可以改用std::unordered_map
. 这将改善访问和插入时间。
既然你说你是一个初学者,我会给你一个我如何阅读你的文件的例子:
std::ifstream file("animal_names.txt");
std::string animal, name;
std::map<std::string, std::string> animal_names;
while (file >> animal >> name) {
animal_names[animal] = name;
}
稍后,如果您想打印出例如猫的名字,只需执行以下操作:
std::cout << animal_names["cat"] << std::endl;
要将动物类型映射到它们的名称,您需要使用std::map<std::string, std::string>
,其中键是动物,值是它的名称,例如:
std::map<std::string, std::string> animalNames;
animalNames["cat"] = "molly";
然后稍后当您将迭代时,std::vector<std::string>
您只需检查您当前正在迭代的单词是否确实作为您的地图中的键存在,并将其替换为它的值。