我正在尝试创建的程序遇到一些问题。我需要阅读一个文本文件,其中包含一个人的姓名,然后是下一行的年龄,对于很多人来说......例如:
Tyler
24
Greg
16
Laura
25
etc...
然后,我需要为数据建立一个列表,该列表根据名称和年龄以及双向链接列表按升序维护。列表需要按原样排序(不是最后)。到目前为止,我已经完成了一个排序的双向链表,我正在读取文件,但是当我打印出文件时,它按升序给出了所有年龄,然后是按字母顺序排列的所有名称。我需要年龄来坚持它属于谁。例如,上面的名称/年龄是当前打印输出:
16
24
25
Greg
Laura
Tyler
当我需要它打印出来时:
(by age)
Greg 16
Tyler 24
Laura 25
或
(by name)
Greg 16
Laura 25
Tyler 24
我可以根据需要发布代码,但我并不是真的在寻找编码帮助(至少到目前为止),更多的是为了将它们保持在一起的技术。目前我正在读取文件,并将其作为字符串传递给插入函数(我很确定这是我错的地方,但不知道如何去做)。
提前致谢,永远感谢这里的帮助!
答案 0 :(得分:0)
我看到了几种可以在这里工作的不同解决方案。如果你这样定义一个类:
class Person {
private:
int name;
int age;
...
};
使用一些不同的比较函数(isGreaterAge()
,isAlphabeticalName()
),这可能有效
如果这不是有是一个链表(这是这个功课吗?),你可以使用地图或(更适合你的目的)多图,这是专门为这类事情设计的:
http://www.cplusplus.com/reference/map/multimap/?kw=multimap
答案 1 :(得分:0)
这主要取决于您设计数据结构的方式以及如何在其上执行排序算法。
数据结构:
您需要将给定节点的数据指针中的信息名称/年龄与双链接列表指针分开。 所以插入将有两个参数,一个是名称,另一个是与列表头指针不同的年龄(如果函数是可重入的)
排序:
有不同的排序方式,我更喜欢的是什么? 最初,列表创建节点是根据名称以排序方式插入的(考虑到名称排序与年龄相关的优先级)
因此,每当用户要求命名排序时,我们都可以直接列出所有元素。
现在,当用户要求进行年龄分类时,您需要执行实际排序,但不要更改链接,只需打印它们并将其标记为已访问或处理您所呼叫的任何内容并继续。
希望这会对你有所帮助。 沙皇