0

編集:ソート機能を使用できません。生物のランキングであるリストを持つプログラムを実行する必要があります。各生物には独自のIDがあり、ランキングは息子の数で降順​​でソートする必要があり、2つの生物の息子の数が同じ場合、それらはIDでますますソートされます. 1つの生物の息子の数を増やした後、次のアルゴリズムを作成しました。

list<pair<int, int> >::iterator it = list.begin();
bool found = false;
int id = (id of the incremented organism)
int sons = (number of sons)
while(not found and it != list.end()) {
   if((*it).first == id) found = true;
   if(found and it != rkg.begin()) {
     --it;
     int prevsons = (*it).first;
     int previd = (*it).second;
     ++it;
     if(prevsons < sons or prevsons == sons and previd > id) {
         it = list.erase(it);
         while(((*it).second < sons or (*it).second == sons and (*it).first > id) and it != list.end) --it;
     list.insert(it, id);
     }
   }
   ++it;
}

しかし、いくつかの生物を挿入した後にランキングを印刷すると、うまくソートされないことがあるため、うまく機能しません。よろしくお願いします。次の操作しか使用できません。

void list.clear();
void list.insert(iterator it, const T& x);
iterator list.erase(iterator it);
void splice(iterator it, list& l);
int size() const;

私の母国語は英語ではありません。

4

1 に答える 1

0

私は最終的にそれを修正しました。追加する要素を挿入する前にイテレータをインクリメントするのを忘れていました:

if(it == list.begin() and not ((*it).second < sons or (*it).second == sons and (*it).first > id) or it != rkg.begin()) ++it;
于 2014-05-26T19:40:29.913 に答える