Sort complex data tyes in c++

avatar
(Edited)

Es ist einfach primitive Datentypen zu sortieren. Dazu muss man die Variable direkt überprüfen, ob sie einen größeren oder kleineren Wert als eine andere Variable hat.
Wenn man komplexe Datentypen sortieren möchte, so muss man entweder den Objekten einen Hashwert zuweisen, oder aber man sortiert komplexe Datentypen nach einer bestimmten Variable innerhalb des Objektes.

It is easy to sort primitive data types. To do this, you must check the variable directly to see if it has a larger or smaller value than another variable.
If you want to sort complex data types, you either have to assign a hash value to the objects, or you sort complex data types by a specific variable within the object.

#include <iostream>
#include <vector>

class Entry {
private:
    int _value;
    std::string _data;
public:
    explicit Entry(int value, std::string data)
    : _value(value), _data(data) {}
    explicit Entry()
    : _value(0), _data("") {}
    virtual ~Entry() { }
    int getValue() const {return _value;}
    std::string getData() const {return _data;}
};

void sortEntries(std::vector<Entry> *entires, unsigned int index){
    Entry entry = entires->at(index);
    int idx = -1;
    for(auto n = index + 1; n < entires->size(); n++){
        if(entry.getValue() > entires->at(n).getValue()){
            idx = n;
            break;
        }
    }

    Entry swap = entires->at(idx);
    entires->at(idx) = entry;
    entires->at(index) = swap;
}

int main() {
    std::vector<Entry> *entries = new std::vector<Entry>();
    for(int n = 10; n > 0; n--){
        entries->push_back(Entry(n, "data"));
    }

    for(int m = 10; m > 0; m--){
        for(int n = 0; n < m-1; n++){
            sortEntries(entries, n);
        }
    }

    for(Entry entry : *entries){
        std::cout << entry.getValue() << '\n';
    }

    delete entries;
}



0
0
0.000
0 comments