参考書の練習問題が解けません。教えてください。
以下問題文です。
5つの名前をvector<string> nameに読み込み、名前が指定された人の年齢をユーザに入力させ、年齢をvector<double> ageに格納せよ。次に、name[i]とage[i]のペアを5つ出力せよ。名前をソートし(sort(name.begin(), name.end()))、name[i]とage[i]のペアを出力せよ。ここで注意しなければならないのは、age vectorの順序をソートされたname vectorと正しく一致させることである。ヒント:ageをソートする前にコピーを作成し、それを使ってageをソートした後の正しい順序でageのコピーを作成する。つぎに同じことを繰り返すが、今後は任意の数の名前を使用できるようにする。
以上です。よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
ヒントの意味が分りませんね。
もしかすると誤記で、ageではなくnameのソート前のコピーを取っておいて、
nameのソート前、ソート後の比較から、ageをソートさせろと言いたいのかもしれません。
#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;
}
こんな感じでいいのでしょうか?
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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- その他(プログラミング・Web制作) パイソン初心者です 4 2022/06/29 06:49
- JavaScript Json のキーと値の出力の違いについて 2 2022/06/14 20:22
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- C言語・C++・C# C言語(構造体) 3 2022/07/05 20:08
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- その他(プログラミング・Web制作) Rでのスクリプトのご相談 3 2022/12/08 16:22
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBScriptで重複レコードを削除...
-
VB.NETでファイル名順にファイ...
-
C# DataGridView のヘッダーセ...
-
System.IO.Directory.GetFiles...
-
リスト構造のソートで悩んでま...
-
C言語・要素除去
-
VBA基本構文の作り方 2列の...
-
文字列をソートする方法
-
excel VBA リストビューの行...
-
あるディレクトリ内のファイル...
-
偶数奇数の判別!!
-
スプレッドでのソート
-
excel VBA の条件をつけての列...
-
ファイル名「1.jpg ~10.jpg~...
-
10個の整数を入力して小さい順...
-
vbでDataTableの抽出コピー
-
構造体配列のソート
-
MSFlexGridのSortメソッドについて
-
DataGridViewの昇順降順。
-
Excel VBA で別シートにデータ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
System.IO.Directory.GetFiles...
-
VB.NETでファイル名順にファイ...
-
C# DataGridView のヘッダーセ...
-
ファイル名「1.jpg ~10.jpg~...
-
C# DataTableの行をソートしてD...
-
あるディレクトリ内のファイル...
-
excel VBA の条件をつけての列...
-
excel VBA リストビューの行...
-
DataGridViewの複数列を連動し...
-
文字列をソートする方法
-
Excelですべての組合せ(重複組...
-
列のどこをクリックしてもソー...
-
n番目に大きい数を求めるアル...
-
Excel VBAで並べ替えをしたい
-
DataGridViewの昇順降順。
-
vbでDataTableの抽出コピー
-
数字文字列のソート方法
-
VB6でデータを昇順に並べ替える
-
VBScriptで重複レコードを削除...
-
ListViewのソートについて
おすすめ情報