简体   繁体   English

我被困在如何使用 C++ 中一个人的名字和姓氏在双向链表中进行排序算法

[英]I'm stuck on how to make a sorting algorithm in a doubly linked list using a person's first name and last name in C++

So I made a doubly linked list which stores a person's first name, last name, address and age and I am currently stuck on making a sorting algorithm for the list.所以我制作了一个双向链表,其中存储了一个人的名字、姓氏、地址和年龄,而我目前正坚持为列表制作排序算法。 So far I've managed to create 3 functions, one that adds a node to the list, one that deletes a node from the list and one which prints the list.到目前为止,我已经设法创建了 3 个函数,一个将节点添加到列表中,一个从列表中删除一个节点,一个用于打印列表。 Here's what I have so far, the struct:这是我到目前为止所拥有的结构:

    struct Node {
    string First_Name;
    string Last_Name;
    string Address;
    int age;
    Node* next;
    Node* prev;
} *first = 0, * last = 0;

The addToList function: addToList function:

void addToList()
{
    string temp = "Yes";
    string First_Name;
    string Last_Name;
    string Address;
    int age;
    Node* current = first;

    while (temp == "Yes") {

        cout << "Enter the persons first name: ";
        cin >> First_Name;
        cout << "Enter the persons last name: ";
        cin >> Last_Name;
        cout << "Enter the persons age: ";
        cin >> age;
        cout << "Enter the persons address: ";
        cin >> Address;
        cout << "Would you like to add another person? Yes or No";
        cin >> temp;

        current = new Node;
        current->First_Name = First_Name;
        current->Last_Name = Last_Name;
        current->age = age;
        current->Address = Address;
        if (last) last->next = current;
        else first = current;
        current->prev = last;
        current->next = 0;
        last = current;
    }
    return;
}

And the print list:和打印清单:

void printList()
{
    if (!first)
    {
        cout << "Nothing is present in the list." << endl;
        return;
    }
    Node* current = first;
    while (current)
    {
        cout << current->First_Name << " " << current->Last_Name << " " << current->age << " " << current->Address << endl;
        current = current->next;
    }
}

My question is, how would I be able to sort the list alphabetically, I've never done sorting before... Thank you!!我的问题是,我如何才能按字母顺序对列表进行排序,我以前从未进行过排序......谢谢!

To use custom sorting for a doubly-linked list, overload operator< :要对双向链表使用自定义排序,重载operator<

struct Person
{
  std::string first;
  std::string last;
  std::string address;
  unsigned int age;
  bool operator<(const Person& p) const
  {
      bool is_less_than = false;
      if (last == p.last)
      {
          is_less_than = first < p.first;
      }
      else
      {
          is_less_than = last < p.last;
      }
      return is_less_than;
  }
};

Now you can use std::list and it will automatically sort by last name, then first.现在您可以使用std::list ,它会自动按姓氏排序,然后是第一个。 And std::list is a doubly-linked list. std::list是一个双向链表。

To compare Person s:要比较Person

  Person a;
  Person b;
  //...
  if (a < b)
  {
     std::cout << "Person A < Person B\n";
  }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM