0
void insertion_sort(int *data, unsigned int n) {
    for (unsigned int uns = 1; uns < n; ++uns ) {
        int next = data[uns];

        unsigned int idx;
        for (idx = uns; idx > 0 && data[idx - 1] > next; --idx) {
            data[idx] = data[idx - 1];
        }
        data[idx] = next;   
    }
}

int main()
{
    vector<Person> crew= ucitaj_osobe("osobe.txt"); /*this reads the file osobe.tx and stores it in vector crew,this works */

       Person o;


    insertion_sort(polje, 100); // ???
    ispisi_osobe(popis); /* this prints out the vector,this works too*/

    return 0;
}

このベクトルを挿入ソートに送信してソートするにはどうすればよいですか? 助けてください、挿入ソートのコードは別のソースから実装されました

4

3 に答える 3

2

関数insertion_sortは配列を並べ替えるために実装されており、関数はオブジェクトintのベクトルの並べ替えには機能しません。Person

Personオブジェクトのベクトルを並べ替えたい場合std::sortは、標準ライブラリから使用することをお勧めします。<これを使用するには、オブジェクトの演算子を実装する必要がありPersonます。

例:

// Only to demonstrate.
struct Person {
    std::string name;
    int age;
};

// Implement according to your needs.
bool operator< (const Person& lhs, const Person& rhs) {
    return lhs.name < rhs.name;
}

 

int main() {
    vector<Person> crew = ucitaj_osobe("osobe.txt");

    std::sort(begin(crew), end(crew));

    ispisi_osobe(popis);

    // return 0; Unnecessary in main function.
}

実際の例: http://ideone.com/YEL7IV

std::sort挿入ソートの使用を保証するものではないことに注意してください。

于 2013-07-25T15:29:55.667 に答える
0

ベクター内の最初の要素のアドレスを渡すことにより、ベクター内の配列へのポインターを渡すことができます。

挿入_並べ替え(&クルー[0], クルー.サイズ());

于 2013-07-25T15:29:28.357 に答える
0

Yourinsertion_sortは、 の配列をソートするように設計されてintおり、 の配列のみをソートしますint。の配列では使用できませんPerson

の代わりに、この挿入ソートを使用する理由はわかりませんstd::sort。ただし、 のベクトルで使用する場合は Person、最初の引数を に変更してPerson*渡す必要があり&crew[0], crew.size()ます。std::vector<Person>より良い解決策は、ポインターとサイズではなく、直接取得するように変換することです。さらに優れた解決策は、2 つの双方向イテレータを使用するテンプレートで、それを で呼び出すことcrew.begin(), crew.end()です。

于 2013-07-25T16:06:45.137 に答える