2012-05-18 53 views
8

thể trùng lặp:
Sort list using stl sort function
why only std::list::sort()?sắp xếp std :: danh sách sử dụng std :: sort

Câu hỏi của tôi là chúng ta có thể loại hai std :: danh sách sử dụng std :: sort chức năng? Tôi có 2 danh sách chuỗi

std::list<std::string>list1, list2; 
    .....//entering values to list 
    std::sort(list1.begin(), list1.end()); 

    std::sort(list2.begin(), list2.end()); 

trong khi tôi sắp xếp các danh sách này tôi gặp lỗi. Tôi đã thử với std :: vector, tại thời điểm này sắp xếp hoạt động.

Lỗi này là như

C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ include \ xutility (1158): thấy tuyên bố 'std :: operator -' 1 > C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ include \ algorithm (3642): lỗi C2784: '_Base1 :: difference_type std :: toán tử - (const std :: _ Revranit < _RanIt, _Base> &, const std :: _ Revranit < _RanIt2, _Base2> &) ': không thể suy ra đối số mẫu cho' const std :: _ Revranit < _RanIt, _Base> & ' từ 'std :: _ List_iterator < _Mylist>' 1> với 1> [ 1> _Mylist = std :: _ List_val> 1>]

tôi phải biết mà chỉ std :: sort hỗ trợ danh sách?

+0

quá tải các Martol1ni

+0

có thể trùng lặp của [tại sao chỉ std :: list :: sort()?] (Http://stackoverflow.com/questions/7996116/why-only-stdlistsort) và [Sắp xếp danh sách bằng cách sử dụng chức năng sắp xếp stl] (http://stackoverflow.com/questions/2432857/sort-list-using-stl-sort-function) –

+0

@ Martol1ni: Đó là 'std :: string'. 'toán tử <' được định nghĩa, nhưng nó sẽ không giúp ích gì. –

Trả lời

37

Bạn không thể sử dụng để sắp xếp std::sortstd::list, bởi vì std::sort yêu cầu trình vòng lặp là truy cập ngẫu nhiên và std::list trình lặp chỉ là hai chiều.

Tuy nhiên, std::list có một hàm thành viên sort rằng sẽ sắp xếp nó:

list.sort(); 
// if you want to use a comparator different from the default one: 
// list.sort(comparator); 
7

Bạn nên sử dụng list::sort, có thể sử dụng một thuật toán khác. std::sort yêu cầu trình vòng lặp truy cập ngẫu nhiên (hỗ trợ các bước nhảy có kích thước tùy ý) trong khi các trình vòng lặp danh sách chỉ có thể chuyển tiếp hoặc lùi bởi một liên kết tại một thời điểm.

Xem C++ 11 25.4.1.1:

template<class RandomAccessIterator> void sort(RandomAccessIterator first, 
     RandomAccessIterator last); 

và 23.3.5.5/27 (thành viên của std::list):

void sort(); 
template <class Compare> void sort(Compare comp); 
Các vấn đề liên quan