• Source
    1. #include <iostream>
    2. #include <vector>
    3. #include <list>
    4. #include <map>
    5. #include <algorithm>
    6. using namespace std;
    7.  
    8. struct Edge
    9. {
    10. Edge() {}
    11. Edge(int o) : origin(o) {}
    12. int origin;
    13. };
    14.  
    15. struct WikiPage
    16. {
    17. WikiPage() {}
    18. WikiPage(const string& t) : title(t) {}
    19. string title;
    20. };
    21.  
    22. typedef vector<list<Edge> > adjacencyList;
    23. typedef map<int,WikiPage> idToWikiMap;
    24.  
    25. struct Local {
    26. Local(idToWikiMap mymap) { this->mymap = mymap; }
    27.  
    28. bool operator() (const list<Edge>& l1, const list<Edge>& l2)
    29. { return mymap.at(l1.front().origin).title < mymap.at(l2.front().origin).title; }
    30.  
    31. idToWikiMap mymap;
    32. };
    33.  
    34. void printOrganized(adjacencyList& lst, idToWikiMap page_ofID) {
    35. // Define compare functions that accepts idToWikiMap parameter
    36.  
    37. /* Sort adjacenyList lst */
    38. sort (lst.begin()+1, lst.end(), Local(page_ofID));
    39.  
    40. for(adjacencyList::const_iterator iter = lst.begin(); iter != lst.end(); ++iter)
    41. cout << page_ofID.at(iter->front().origin).title << endl;
    42. }
    43.  
    44. int main() {
    45. adjacencyList lst;
    46. lst.resize(5);
    47. lst[0].push_back(Edge(-1));
    48. lst[1].push_back(Edge(5));
    49. lst[2].push_back(Edge(7));
    50. lst[3].push_back(Edge(2));
    51. lst[4].push_back(Edge(1));
    52. idToWikiMap page_ofID;
    53. page_ofID[-1] = WikiPage("Unused");
    54. page_ofID[5] = WikiPage("Toronto");
    55. page_ofID[7] = WikiPage("Chicago");
    56. page_ofID[2] = WikiPage("New York");
    57. page_ofID[1] = WikiPage("Montana");
    58. printOrganized(lst, page_ofID);
    59. return 0;
    60. }