0

编辑:我不能使用排序功能。我必须做一个程序,它有一个有机体排名列表,每个有机体都有自己的 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;

对不起,如果我表达自己不好,我的母语不是英语。

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 回答