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();
};
У меня реализовано много этих функций, и я пытаюсь получить зависание этих узлов. Я надеюсь, кто-то может помочь мне с этим
Следуя предложению слова 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;});