Я пытаюсь отсортировать эти узлы по алфавиту

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 где объявлена функция

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 ++ и удалите весь этот код. Если это что, именно ваш вопрос?
  • 0
    как отсортировать по названию?
Показать ещё 3 комментария
Теги:
sorting

1 ответ

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;});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню