わかりましたので、次のとおりです。
二重リンク リストを使用し、その中のオブジェクトを並べ替えたいと考えています。オブジェクトは別のクラスです。奇妙なことに、自分で作成した二重連結リストを使用すると、要素をリストに追加した瞬間に要素を並べ替えます。これは挿入ソートのようなもので、効率は n^2 です。
しかし、これは、すべての要素をリストに追加してから sort() を呼び出す std::list 順序付けを使用するよりもはるかに高速です。そして、私は本当に理由がわかりません....
詳細については、現在、〜 500 個の要素を並べ替えています。
リストに何か問題がありますか?
編集:いくつかのコード
std::list のコード
for every object:
list.push_back(object);
list.sort();
私のリスト:
struct node{
someObject* data;
float depth;
node* prev;
node* next;
node(someObject* o){
data = o;
prev = NULL;
next = NULL;
depth = depthFunc(o);
}
float depthFunc(someObject* o);
};
struct myList{
node* head;
node* tail;
void insertAfter(node* toAdd, node* n);
void insertBefore(node* toAdd, node* n);
void addNode(someObject* o){
node* n = new node(o);
if (head == NULL) {
head = n;
tail = n;
} else {
node* temp = head;
while(temp != NULL && temp->depth < n->depth){
temp = temp->next;
}
if (temp != NULL) insertBefore(n, temp);
else insertAfter(n, tail);
}
}
};