2012-04-17 44 views
6

Tôi tự hỏi liệu chúng là một số thuật toán trong stl hay trong Qt sắp xếp một mảng kép và trả về chỉ mục của các mục được sắp xếp trong danh sách gốc. Ví dụ: L = 1, 2, 5, 3 L_sort = 1, 2, 3, 5 Chỉ số = 1, 2, 4, 3Sắp xếp thuật toán với Qt/C++ - sắp xếp một QList của cấu trúc

Vì vậy mà sau đó tôi có thể tính toán Danh sách khác [Chỉ mục] (cùng thứ tự chiếm ưu thế trong cả hai danh sách, đối với danh sách ban đầu L). Cuối cùng, tôi nghĩ đến việc tạo ra một QList, mỗi MyStruct có chứa hai thành viên, một trong cùng một loại LType như các phần tử trong L, một kiểu khác của cùng loại là các thành phần trong AnotherList. Và sau đó đặt hàng đối với các thành viên của loại LType. Tuy nhiên tôi có ý tưởng này, tôi không biết làm thế nào để tiến hành trong Qt.

Trân trọng cảm ơn

+0

tôi không thể nghĩ về việc sử dụng với điều này !! –

Trả lời

9

Bạn có thể lưu trữ dữ liệu với chỉ số theo cặp ... trước sắp xếp theo giá trị, sắp xếp thứ hai bởi chỉ số ...

QList<QPair<LType,int> > array; 
for (int i = 0; i < 100; i++) 
{ 
    LType x = ... 
    array.append(qMakePair(x,i)); 
} 

// Ordering ascending 
qSort(array.begin(), array.end(), QPairFirstComparer()); 

..... 

// Restoring start order 
qSort(array.begin(), array.end(), QPairSecondComparer()); 

Bạn chỉ cần các lớp:

struct QPairFirstComparer 
{ 
    template<typename T1, typename T2> 
    bool operator()(const QPair<T1,T2> & a, const QPair<T1,T2> & b) const 
    { 
     return a.first < b.first; 
    } 
}; 

struct QPairSecondComparer 
{ 
    template<typename T1, typename T2> 
    bool operator()(const QPair<T1,T2> & a, const QPair<T1,T2> & b) const 
    { 
     return a.second < b.second; 
    } 
}; 
Các vấn đề liên quan