Sortowanie struktury

0

Dzień dobry,

Zastanawiam się jak posortować strukturę po dwóch elementach. Dla przykładu mam taką strukturę:

typedef struct{
        int stopnie;
        int minuty;
        char symbol;  // W lub E
        // pozostałe zmienne dla szerokości geograficznej
} Polozenie;

i chciałbym ją posortować po zmiennych symbol i stopnie, tak żeby najpierw były wszystkie 'W' malejąco a potem wszystkie 'E' rosnąco. Da się zrobić coś takiego? Szukałem w sieci i nigdzie nie mogłem na to trafić.

0

http://www.cplusplus.com/forum/general/97555/

#include<iostream>
#include <vector>
#include <algorithm>

using namespace std;

struct Polozenie
{
    int stopnie;
    int minuty;
    char symbol;

    Polozenie(int stopnie, int minuty, char symbol)
    {
        this->stopnie = stopnie;
        this->minuty = minuty;
        this->symbol = symbol;
    }
};

bool comp(Polozenie a, Polozenie b)
{
    return a.stopnie < b.stopnie;
}

int main()
{
    vector<Polozenie>vec;
    vec.push_back(Polozenie(23, 22, 'a'));
    vec.push_back(Polozenie(1, 2, 'z'));
    vec.push_back(Polozenie(1, 55, 'b'));
    vec.push_back(Polozenie(44, 2, 'y'));
    vec.push_back(Polozenie(3, 9, 'c'));
    vec.push_back(Polozenie(8, 8, 'z'));
    vec.push_back(Polozenie(3, 9, 'd'));

    sort(vec.begin(), vec.end(), comp);

    for (int i = 0; i < vec.size(); i++)
        cout<<vec.at(i).stopnie<<" "<<vec.at(i).minuty<<" "<<vec.at(i).symbol<<endl;
}
3

W C++ możesz napisać struct Polozenie, bez typedefowania. Zakładam, że przez "sortowanie struktury" masz na myśli sortowanie tablicy/kontenera struktur.

std::sort(b, e, [](auto const& l, auto const& r){
    if(l.symbol == r.symbol) {
        if(l.symbol == 'W')
            return std::tie(l.stopnie, l.minuty) > std::tie(r.stopnie, r.minuty);
        else
            return std::tie(l.stopnie, l.minuty) < std::tie(r.stopnie, r.minuty);
    } else {
        return l.symbol > r.symbol;
    }
});

To na oko powinno działać: https://wandbox.org/permlink/M1sBVODSYKrJie1V

0

Tak, chodziło o sortowanie kontenera (vector) ze strukturami.

Dziękuję za odpowiedzi.

1 użytkowników online, w tym zalogowanych: 0, gości: 1