Wenn Sie beide Aufträge als laufende Sache halten wollen, während Elemente hinzugefügt und entfernt werden, dann könnte man Multi-Index steigern verwenden:
http://live.boost.org/doc/libs/1_34_0/libs/multi_index/doc/tutorial/basics.html#multiple_sort
Dieses Beispiel von dieser Seite ist ziemlich viel, was Sie wollen, außer sortierter in umgekehrter Reihenfolge:
multi_index_container<
int,
indexed_by<
sequenced<>, // sequenced type
ordered_unique<identity<int> > // another index
>
> s;
Wenn Sie es einfach als Betrieb Einmal wollen, Ihre Idee, die Zeiger der Sortierung klingt gut. Als eine leichte Variante könnten Sie einen Vektor von std::pair<int,size_t>
erstellen, wobei jedes Paar aus einem Wert besteht, auf den der Index folgt. Dann sortiere den Vektor der Paare mit std::sort
und spezifiziere std::greater<std::pair<int,size_t> >
als Komparator.
Edit:
Ihr konkreter Fall gegeben, würde ich auf jeden Fall Paare beraten Sortierung, weil auf diese Weise nur einmal die Summe jeden inneren Vektor berechnen muß, und speichern Sie es in dem Paar. Wenn Sie nur Zeiger/Indizes sortieren würden, müssten Sie für jeden Vergleich zwei Summen berechnen. also:
typedef vector<vector<double> >::const_iterator It;
typedef pair<double, It> Pair;
vector<Pair> pairvec;
pairvec.reserve(input.size());
for (It it = input.begin(); it != input.end(); ++it) {
// some people would split this over multiple lines
pairvec.push_back(make_pair(accumulate(it->begin(), it->end(), 0.0), it));
}
sort(pairvec.begin(), pairvec.end(), greater<Pair>());
Dann können Sie über Pairvec iterieren. Machen Sie einen non-const Iterator, wenn Sie müssen.
Danke für diese Antwort. Ich wusste vorher nicht von Boost Multi-Index. Es scheint ein bisschen zu komplex für das, was ich tat, was nur eine einmalige Operation ist. – Jared
@ Jared: Ich habe meine Antwort basierend auf Ihrer Bearbeitung bearbeitet. –