C++ 用于排序名称的双链接列表&;年龄分别为C和x2B+;

C++ 用于排序名称的双链接列表&;年龄分别为C和x2B+;,c++,sorting,data-structures,linked-list,C++,Sorting,Data Structures,Linked List,我试图创建的程序遇到了一些问题。我需要读入一个文本文件,其中有一个人的名字,下一行紧跟着他们的年龄,不管有多少人..例如: Tyler 24 Greg 16 Laura 25 etc... 然后,我需要为数据建立一个列表,该列表根据姓名和年龄以升序维护,并使用双链接列表。列表需要按顺序进行排序(而不是在末尾)。到目前为止,我已经完成了一个排序的双链表的构建,并且我正在阅读该文件,但是当我打印出该文件时,它会按升序显示所有年龄,然后按字母顺序显示所有姓名。我需要年龄来坚持它属于谁。例如,上面的

我试图创建的程序遇到了一些问题。我需要读入一个文本文件,其中有一个人的名字,下一行紧跟着他们的年龄,不管有多少人..例如:

Tyler
24
Greg
16
Laura
25
etc... 
然后,我需要为数据建立一个列表,该列表根据姓名和年龄以升序维护,并使用双链接列表。列表需要按顺序进行排序(而不是在末尾)。到目前为止,我已经完成了一个排序的双链表的构建,并且我正在阅读该文件,但是当我打印出该文件时,它会按升序显示所有年龄,然后按字母顺序显示所有姓名。我需要年龄来坚持它属于谁。例如,上面的姓名/年龄当前正在打印:

16
24
25
Greg
Laura 
Tyler
当我需要打印时:

(by age)
Greg 16
Tyler 24
Laura 25

如果需要的话,我可以发布代码,但我并不是真的在寻找编码帮助(至少到目前为止),而只是为了让它们保持在一起的技术。目前,我正在读取该文件,并将其作为字符串传递给insert函数(我很确定这是我弄错的地方,但不知道如何进行)


提前感谢,永远感谢这里的帮助

我发现有两种不同的解决方案可以在这里使用。如果您这样定义一个类:

class Person {
 private:
  int name;
  int age;

  ...
};
使用一些不同的比较函数(
isGreaterAge()
isAlphabeticalName()
),这可能会起作用。
如果这不一定是一个链表(这是作业吗?),你可以使用地图或(更适合你的目的)多重地图,它们是专门为做这类事情而设计的:

这主要取决于您设计数据结构的方式以及排序算法如何在其上执行

数据结构:

您需要将给定节点的数据指针中的信息名称/年龄与双链接列表指针分开。 因此,insert将有两个参数,一个是name,另一个是与列表头指针不同的age(如果函数是可重入的)

分类:

有不同的排序方法,我更喜欢的是? 最初,列表创建节点是根据名称以排序方式插入的(考虑到与名称排序相关的优先级,而不是年龄)

因此,每当用户要求命名排序时,我们都可以直接列出所有元素

现在,当用户要求按年龄排序时,您需要执行实际排序,但不要更改链接,只需打印它们并将它们标记为已访问或已处理,无论您调用什么,然后继续

希望这对你有帮助。
沙皇

如果是我,我会用
名字
年龄
属性制作一个类。然后按
getName()
getAge()
对对象进行排序,建议使用地图。但是C++ IDO总是喜欢向量,直到有其他需要的原因。(例如,在您注意到向量是一个性能瓶颈后,测量的性能优于向量。)
class Person {
 private:
  int name;
  int age;

  ...
};