我想我可能做得对,headByRating和headByName都指的是同一个地址。
我一直在努力工作,整天都在尝试新事物,而且我还没有取得任何进展。
我有两个列表指针headByRating和headByName。 和两个节点指针nextByName和nextByRating。
不知何故,我需要能够按名称和等级对这些东西进行排序。 我一直在想我是通过每个ptrs'地址'来做到的。
作为我一直试图排序的一个例子的2个陈述:
//main.cpp list *wineries = new list(); wineries->insert(winery("Lopez Island Vinyard", "San Juan Islands", 7, 95)); wineries->insert(winery("Gallo", "Napa Valley", 200, 25));
酿酒厂ctor很好,所有东西都被分配到这个目标中:
//list.cpp void list::insert( const winery& winery ) { list *listPtr = new list(); // havent really used the list obj. yet. node *current = new node( winery ); // winery is now a node. node *temp = current; // temp knows about the nodes address. while ( temp->nextByName != NULL ) { // check for null and reassign temp = temp->nextByName; } node *new_node = new node( winery ); // creating a new node. new_node->item = winery; new_node->nextByName = new_node; new_node->nextByRating = new_node; }
// list.h struct node { winery item; node * nextByName; node * nextByRating; }; class list { ... private: node * headByName; node * headByRating; };
对此有什么好处?我不认为我这样做是对的。
答案 0 :(得分:4)
为什么要滚动自己的链表?为什么不使用std::list
?
如果它是双重排序的东西,两个单独的指针列表将起作用,如果你可以使用提供的容器类,那就更容易了。
或者,如果您需要对其进行排序,链接列表是最佳选择吗? std::vector
通常更容易排序,或std::set
维护订单本身。
答案 1 :(得分:0)
看起来你有几个问题:
我建议从此方法中删除所有内容并在其位置编写高级伪代码。然后为每行伪代码创建一个较小的方法。内部插入调用的较小逻辑方法将有助于理解。
答案 2 :(得分:0)
如果要进行实验的List类型,请执行此操作,否则请使用std :: list。
如果要在插入新元素时对列表进行排序,则必须实现有序列表。
最好从列表中删除“winery field”依赖项。一个节点应该只有一个 next 节点,而不是很多。你正在制作一个List,而不是一棵树。
// list.h
struct node
{
winery item;
node * next;
};
class list
{
...
private:
node * head;
};
您不能在不同的酿酒厂字段中订购一个清单 制作一种新类型,如CWinery,它将作为您酒庄记录的容器 在那里,你可以有一个列表来存储你的元素和方法,以便对它进行排序或者你需要的任何东西。
答案 3 :(得分:0)
如果您需要使用带有多个索引的列表,您应该考虑使用boost::multi_index而不是发明轮子。