地產

2013-09-23 29 views
2

排序與對象名單我完全難倒,在實例環顧四周並沒有幫助我得到這個排序功能的工作:地產

void sortRegistryByName(std::list<Transcript>& registry) { 
    std::sort(registry.begin(), registry.end(), [](const Transcript &f, const Transcript &s) { return f.name < s.name; }); 
} 

上面的代碼應該排序成績單的名單他們名稱屬性。

而且成績單如下:

typedef struct Transcript_t { 
    std::string name; // Name of the transcript 
    std::string student_id; 
    std::list<std::pair<std::string, size_t>> grades; // List of (course, grade) pairs 
} Transcript; 

當我嘗試編譯此排序功能會導致相關safe_iterators和運營商的東西錯誤之一巨大的牆。

有人在這裏看到任何真正愚蠢的錯誤嗎?我對此一竅不通。

+1

'的std :: sort'需要隨機訪問迭代器,'的std :: list'只提供雙向迭代器。但是,[它有一個成員'.sort'](http://en.cppreference.com/w/cpp/container/list/sort),您可以使用它。 – Xeo

+0

我不明白你爲什麼在這裏使用'size_t' - std :: list >等級;',並且給定它的上下文,你可能會更好與'std :: map ' - 假設不會有重複的課程。 – Aesthete

+0

不幸的是,這部分並不是我的設計,這是我現在正在做的課程的一個優化,而成績單也是這樣給出的。 – user2806423

回答

6

你必須調用std::listsort功能,因爲它不具有隨機訪問迭代器:

std::list<Transcript> registry; 
registry.sort([](const Transcript &f, const Transcript &s) { return f.name < s.name; }); 
+0

謝謝,工作就像一個魅力! – user2806423