在增加一个元素后对列表进行排序

Sort a list after incrementing one element

本文关键字:列表 排序 元素 一个 增加      更新时间:2023-10-16

编辑:我不能使用排序函数。我必须做一个程序,它有一个生物体的排序列表,每个生物体都有自己的ID,这个排序必须按照子代的数量递减如果两个生物体有相同数量的子代,那么它们的排序就会按照ID递增。我做了下面的算法,以增加一个生物体的子代数量:

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;

很抱歉,如果我表达得不好,我的母语不是英语。

我终于修复了它,我忘记了在插入元素之前增加迭代器添加:

if(it == list.begin() and not ((*it).second < sons or (*it).second == sons and (*it).first > id) or it != rkg.begin()) ++it;