• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:c++ 参考書の問題)

C++参考書の問題|練習問題解けない|教えてください

このQ&Aのポイント
  • C++参考書の練習問題が解けないときの対処方法について教えてください。名前と年齢を扱う問題の解法も教えていただけると助かります。
  • C++参考書の問題で、名前と年齢を扱う問題があります。解けない場合はどのように対処すればいいですか?ソートやペアの出力についても教えていただけると嬉しいです。
  • C++の参考書で出題された名前と年齢を扱う問題が難しくて解けません。解法やアドバイスを教えてください。ソートやペアの出力についても詳しく教えていただけると嬉しいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • gragra24
  • ベストアンサー率31% (18/57)
回答No.1

ヒントの意味が分りませんね。 もしかすると誤記で、ageではなくnameのソート前のコピーを取っておいて、 nameのソート前、ソート後の比較から、ageをソートさせろと言いたいのかもしれません。

koun
質問者

お礼

#include <iostream> #include <string> #include <vector> #include <algorithm> using namespace std; int main(){ //nameベクターをつくる vector<string> name; name.push_back("Taro1"); name.push_back("Taro2"); name.push_back("Taro3"); name.push_back("Taro4"); name.push_back("Taro5"); //ageベクターをつくる vector<double> age; double d_age; for(int i=0; i<name.size(); ++i){ cout << name[i] << " age:"; cin >> d_age; age.push_back(d_age); } //ソート前のnameベクターのコピーをつくる vector<string> pre_name = name; //nameベクターをソートする sort(name.begin(), name.end()); //新しいageベクターをつくる vector<double> new_age(name.size()); for(int i=0; i<name.size(); ++i){ for(int j=0; j<name.size(); ++j){ if(pre_name[j] == name[i]){ new_age[i] = age[j]; } } } //表示 cout << "ソートしました。\n"; for(int i=0; i<name.size(); ++i){ cout << name[i] << " age:" << new_age[i] << '\n'; } return 0; } こんな感じでいいのでしょうか?

koun
質問者

補足

そうかもしれません。

その他の回答 (1)

回答No.2

> こんな感じでいいのでしょうか? 結果が正しけりゃいいんじゃね? #include <iostream> #include <vector> #include <string> #include <utility> #include <tuple> #include <algorithm> #include <iterator> using namespace std; int main() { // 5つの名前をvector<string> nameに読み込み、 // 名前が指定された人の年齢をユーザに入力させ、 // 年齢をvector<double> ageに格納せよ。 // ↑メンドクセーので省略 vector<string> name { "chris", "mike", "bob", "andy", "bill" }; vector<double> age { 10, 20, 30, 40, 50 }; // 次に、name[i]とage[i]のペアを5つ出力せよ。 for ( int i = 0; i < name.size(); ++i ) { cout << name[i] << ':' << age[i] << endl; } cout << endl; // 名前をソートしname[i]とage[i]のペアを出力せよ。 // ここで注意しなければならないのは、age vectorの順序を // ソートされたname vectorと正しく一致させることである。 vector<tuple<string,double>> pairs; transform( begin(name), end(name), begin(age), back_inserter(pairs), [](string n, double a) { return make_tuple(n,a);}); sort( begin(pairs), end(pairs), [](const tuple<string,double>& x, const tuple<string,double>& y) { return get<0>(x) < get<0>(y); }); for ( const auto& item : pairs ) { cout << get<0>(item) << ':' << get<1>(item) << endl; } }

関連するQ&A