2014-11-12 5 views
0
void PrimaryIndex::sortByTitle(){ 
    P_Node* temp; 
    for (int temp = 0; temp < size(title); temp++) { 
     temp = NULL; 

     if (temp->title > temp->next->title) { 
      swap(); 
     } 
    } 
} 

Я знаю, что это неправильно, но я использую узлы для этой программы. Вот мой файл PrimaryIndex заголовок, где функция объявлена ​​Im пытается сортировать эти узлы по алфавиту

class P_Node 
{ 
    friend class PrimaryIndex; 
private: 
    std::string title; 
    int pos; 
    P_Node * next; 
    P_Node * prev; 
public: 
    P_Node() : title("Hi"), pos(0) { next = prev = NULL; } 
    P_Node(std::string my_title, int my_pos) : title(my_title), pos(my_pos) 
    { 
     next = prev = NULL; 
    } 
}; 

class PrimaryIndex 
{ 
    friend class P_Node; 
private: 
    P_Node * head; 
    P_Node * tail; 
    int size; 
public: 
    PrimaryIndex() : size(0) 
    { 
     head = new P_Node(" ", -1); 
     tail = new P_Node("~", -1); 
     head->next = tail; 
     tail->prev = head; 
    } 
    // functions that I will be using 
    ~PrimaryIndex() { killList(); } 
    bool set_title_key(std::string my_title, int my_key); 
    void writePrimary(); 
    void readPrimary(); 
    void change_title(std::string new_title, int key); 
    int matchTitle(std::string inTitle, int key); 
    void killList(); 
    void deletebyTitle(); 
    void sortByTitle(); 
    void revSortByTitle(); 
}; 

У меня есть много таких функций, реализованных и я пытаюсь освоиться этих узлов. Я надеюсь, что кто-то может помочь мне с этим

+0

Является ли это домашнее задание? Если это не так, используйте класс контейнера C++ и удалите весь этот код. Если это то, что конкретно, это ваш вопрос? – PaulMcKenzie

+0

как мне сортировать по названию? –

+0

То, что я делаю, неверно –

ответ

0

Следуя предложению комментария PaulMcKenzie: забудьте весь свой код и используйте std::list. Его тип хранения - двусвязный список - это в основном то, что ваш класс пытается достичь. Затем просто используйте std::sort.

std::list<std::string> myList{"title1", "title2","titleN"}; 
std::sort(myList.begin(),myList.end()); 

Если этого не достаточно для вас, используйте свой собственный класс и упаковать его в списке, а затем использовать std::sort с пользовательским предикатом:

struct MyClass 
{ 
    std::string title; 
    //... more 
}; 
std::list<MyClass> myList; 
std::sort(myList.begin(), myList.end() 
     , [] (MyClass const& a, MyClass const& b) { return a.title<b.title;}); 
Смежные вопросы