我试图按字母顺序对这些节点进行排序

时间:2014-11-12 23:56:29

标签: c++ sorting

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

我已经实现了很多这些功能,我试图抓住这些节点。我希望有人可以帮我解决这个问题

1 个答案:

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