我试图想出让多个数据集使用相同的线性链接列表的最佳方法。数据集将各自具有将保持的唯一信息,并且它们将按特定顺序排序。例如,我可能有一个人员列表,其中包含他们的姓名,地址和电话号码,并按名称按字母顺序排序。然后我可能会有一个交易清单,其中每笔交易都有日期,项目和金额,并按日期排序。
我试图在没有编写多个LLL数据结构的情况下考虑最好的方法。我有点生疏,所以任何建议都会非常感激。我以前从未在c ++中使用模板,但我想知道这是否是我应该去的方向。
答案 0 :(得分:0)
我相信你在问如何编写一个可用于多种不同数据类型的容器类?
根据我对问题的理解,你应该使用的是STL向量。 STL容器类都是模板化的,因此它们可以用于任何数据类型。我建议使用vector类,因为它的排序速度比链表快得多,而且你没有指定需要链表的任何特殊原因。尽管如此,如果需要,您可以使用STL列表类。在任何情况下,您都应该很少编写自己的容器,尤其是对于像这样的简单用例。
您可以使用STL排序算法(http://www.cplusplus.com/reference/algorithm/sort/)对支持随机访问迭代器的容器进行排序,例如向量。
示例:
// STL includes
#include <algorithm>
#include <vector>
bool personComparator(const Person& p1, const Person& p2)
{
return p1.getName().compare(p2.getName());
}
bool txtComparator(const Transaction& t1, const Transaction& t2)
{
return t1.getTime() < t2.getTime();
}
void exampleFunction()
{
// build a vector of Person objects and sort it
std::vector< Person > vecPeople;
vecPeople.push_back(Person("David", 28, "david@domain.com"));
vecPeople.push_back(Person("Adam", 20, "adam@domain.com"));
std::sort(vecPeople.begin(), vecPeople.end(), personComparator);
// build a vector of Transaction objects and sort it
std::vector< Transaction > vecTrx;
vecTrx.push_back(Transaction("Blue Jeans", 20.0f));
vecTrx.push_back(Transaction("C++ Book", 25.0f));
std::sort(vecTrx.begin(), vecTrx.end(), trxComparator);
}
答案 1 :(得分:0)
您可以创建一个只有下一个指针和相应链接类(头指针,尾指针,可选择计数)的基节点类,并创建一组列表函数(peekfirst,popfront,pushback,... )与该基节点类一起操作。然后,您可以添加包含数据的继承类。要将通用列表函数与继承的类一起使用,可以将继承的类转换为基类。