Как сортировать первый контейнер по одному свойству, чем другим?

Только одно поле легко:

bool operator<(const MidiMsg &midiMsg) const {
    return (mPosition < midiMsg.mPosition);
}

Но что если мне нужно заказать сначала 1 член, чем другим?

Попытался это:

bool operator<(const MidiMsg &midiMsg) const {
    return (mPosition < midiMsg.mPosition && mId < midiMsg.mId);
}

Но, похоже, не работает.

Вот рабочий пример:

#include <iostream>
#include <deque>
#include <algorithm>

struct MidiMsg {
    int mPosition;
    int mId;

    bool operator<(const MidiMsg &midiMsg) const {
        return (mPosition < midiMsg.mPosition && mId < midiMsg.mId);
    }
};

int main() {
    std::cout.precision(10);

    std::deque<MidiMsg> mNotes;

    MidiMsg note;

    note.mPosition = 0;
    note.mId = 1;
    mNotes.push_back(note);

    note.mPosition = 44100;
    note.mId = 1;
    mNotes.push_back(note);

    note.mPosition = 0;
    note.mId = 0;
    mNotes.push_back(note);

    note.mPosition = 44100;
    note.mId = 0;
    mNotes.push_back(note);

    note.mPosition = 0;
    note.mId = 2;
    mNotes.push_back(note);

    note.mPosition = 44100;
    note.mId = 2;
    mNotes.push_back(note);    

    std::sort(mNotes.begin(), mNotes.end());

    for (size_t index = 0; index < mNotes.size(); index++) {
        std::cout << mNotes[index].mPosition << " - " << mNotes[index].mId << std::endl;
    }
}

Выходы:

0 - 1
0 - 0
44100 - 1
44100 - 0
0 - 2
44100 - 2

а не:

0 - 0
0 - 1   
0 - 2   
44100 - 0   
44100 - 1
44100 - 2
0
2019-09-17 16:21:35
источник
0 ответов

Посмотрите другие вопросы по меткам