2016-09-21 13 views
1

EDIT:これは重複した質問としてマークされましたが、リンクされた質問は私が求めているものではありません。私は構造体の配列を関数に渡す方法を知っています。私はその配列内の要素からメンバデータを関数に渡す方法について助けを求めています。構造体の配列からメンバデータを関数に渡すにはどうすればよいですか?

私は私が学生の情報を追跡するための構造を作成するために仕事を課されたC++での宿題を持っている:

struct Student { 
    string name; 
    double idNumber; 
    double currentGrade; 
    double lastGrade; 
    double overallGPA; 
}; 

ユーザーは、彼らがデータを入力されることを学生の数を入力するように要求されますこの入力に基づいて構造体の配列を作成します。その後、プログラムは各要素をループし、ユーザーに構造の各インスタンスのメンバーデータを入力するように促します。

すべてのデータが入力されると、ユーザーが選択したメンバー変数に基づいて配列を並べ替える作業が行われます。私は名前変数で並べ替えるためのソート関数を書いていますが、二重変数に基づいて配列をソートするための一般的な関数を書いていますが、4つの二重変数すべてに対してどのように関数を使うことはできません。

void doubleSort(Student arr[], int arrSize) { 
    // bubble sort: high -> low 
    Student temp; 
    for(int i = 0; i < arrSize; i++) { 

     for(int j = 0; j < arrSize; j++) { 

      if(arr[j] < arr[i]) { 
       // swap values 
       temp = arr[i]; 
       arr[i] = arr[j]; 
       arr[j] = temp; 
      } 
     } 
    } 
} 

しかし、個々のメンバ変数のソート機能を書き込まないようにするために、arguement、すなわちidNumberとして会員データを渡す:基本的に

、私はこの機能を使用することができます方法はありますか?

+1

これは重複しているようには見えませんが、多分質問に異なる言い方をすることができます。私はここでのOPは、関数内のパラメータに基づいて構造体のいくつかのフィールドにアクセスしたいと考えています。配列の受け渡しはすでに解決されています。 – MayeulC

+0

https://stackoverflow.com/questions/14418595/c-method-for-iterating-through-a-structs-members-like-an-array – MayeulC

+0

を修正してください。私の言い回しはあまり良くありませんでしたが、ソート関数内の構造体のフィールドにアクセスしようとしています。 – Austin

答えて

0

いいえソート用の汎用関数を1つ書くことはできません。フィールドごとに比較関数を持つ必要があります。また、ソートするメンバをもう1つの引数を渡してチェックします比較するフィールドとそのタグをスワップします。

フィールドごとの比較機能を使用するように並べ替える最も良い方法です。その後、

bool compareCurrentGrade (const Student & a, const Student & b) { 
    return a.currentGrade < b.currentGrade; 
} 

そして、あなたは外部ソートlibrayモジュールを使用したくない場合は、 を記述する必要があり、よりおよそソートSee

を知って#include <algorithm>

sort(studentarr, startoffset, endoffset, compareCurrentGrade); 

で定義されたソート機能を使用しますフィールドごとにソート関数。

関連する問題