2011-12-16 27 views
16

Tôi có một std :: danh sách các cạnh đồ thị và tôi muốn sắp xếp các cạnh dựa trên điểm đến của chúng vượt trội và sau đó là sự không rõ ràng của chúng. Nhưng tôi đang nhận được ngoại lệ của nhà điều hành không hợp lệ < trong chức năng so sánh của tôi dưới đây là mã của tôi. Danh sách của tôi chứa các con trỏ đến các cạnh và các cạnh có các nút đích làm thành viên của chúng.toán tử không hợp lệ <trong khi sắp xếp std :: list

bool compareEdges(const Edge *e1,const Edge *e2){ 
if(e1->destination->outdegree < e2->destination->outdegree){ 
    return true; 
} 
else if(e1->destination->outdegree > e2->destination->outdegree){ 
    return false; 
} 
else if(e1->destination->indegree > e2->destination->indegree){ 
     return false; 
    } 
return true; 

}

Và đây là cuộc gọi đến chức năng sắp xếp.

currentNode->edgeList.sort(compareEdges); 

Hãy giúp tôi xóa ngoại lệ này.

enter image description here

Cảm ơn

+1

'(currentNode-> edgeList) .sort (compareEdges);' help? – DhruvPathak

+2

Các loại 'outdegree' và' indegree' là gì? –

+0

Loại 'outdegree' là gì ?? –

Trả lời

29

so sánh của bạn trả về true khi cả hai lĩnh vực có liên quan đều bình đẳng. Điều này là không hợp lệ, vì vậy nó cũng có thể là những gì thực hiện sort đã phát hiện thông qua khẳng định.

Bạn phải chuyển một biến vị ngữ "ít hơn" sang sort: chính thức là "thứ tự yếu nghiêm ngặt". Bất cứ điều gì khác là hành vi không xác định. Dường như trong trường hợp này bạn đã may mắn, và việc thực hiện phát hiện ra rằng nó đã đi vào một tình huống không thể do sự so sánh không phù hợp.

+0

Sắp xếp phải làm gì nếu hai điều bình đẳng theo ý kiến ​​của tôi, nó chỉ cần trả về giá trị đúng hoặc sai. Bạn có thể vui lòng giải thích thêm một chút về cách nó nên được nếu muốn sắp xếp các cạnh đầu tiên trên cơ sở của outdegree và nếu họ là như nhau thì về những điều cơ bản của indegree. –

+4

Nó phải trả về 'false' khi chúng bằng nhau, tôi sợ ý kiến ​​của bạn không tham gia vào nó ;-) Bộ so sánh sẽ hoạt động như" nhỏ hơn ", và' x

+0

Vì vậy, bạn có nghĩa là tôi không nên trả lại bất kỳ điều gì khi hai giá trị bằng nhau? –

Các vấn đề liên quan