1

私はテキストファイルを持っています、

猫のモリー
犬ベンジー
鳥のチャーリー (etc..)

別のテキスト ファイルでは、「ある日、猫は太陽の下で寝転がりに出かけました。犬はすでに庭にいました...」(など..)

動物をその名前に置き換えることになっています。現時点では、ファイルを読み込んで、動物の種類を 1 つのベクトルに配置し、動物の名前を別のベクトルに配置しています。私の質問は、ループして cat を見つけたときに関連する名前を見つけることができるように、それらを構造に入れる必要がありますか?それとも別の方法を使用しますか? 多次元ベクトルについて聞いたことがありますが、プログラミングに非常に慣れていないので、頭がいっぱいかもしれません。

4

2 に答える 2

3

使用するのに最も適した構造はマップだと思われます。動物と名前を関連付けて、動物の名前を簡単かつ効率的に調べることができます。

これを試して:

std::map<std::string, std::string> animal_names;

最初のテンプレート タイプはキータイプで、2 番目のテンプレート タイプはタイプです。あなたの場合、キーは動物で、値は名前です。

次に、これを使用して関連付けを挿入できます。

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;
于 2013-03-28T11:10:30.107 に答える
2

動物の種類をその名前にマッピングするには、 を使用します。ここstd::map<std::string, std::string>で、キーは動物で、値はその名前になります。例:

std::map<std::string, std::string> animalNames;
animalNames["cat"] = "molly";

後で反復するときにstd::vector<std::string>、現在反復している単語がマップ内のキーとして存在するかどうかを確認し、それをその値に置き換えます。

于 2013-03-28T11:10:46.820 に答える