【问题标题】:Multiple sorted lists多个排序列表
【发布时间】:2014-11-10 01:45:00
【问题描述】:

我正在尝试让多个数据集使用相同的线性链接列表的最佳方法。每个数据集都将拥有唯一的信息,并且每个数据集都将按特定顺序排序。例如,我可能有一个人员列表,其中包含他们的姓名、地址和电话号码,并按他们的姓名按字母顺序排序。然后我可能有一个交易列表,其中每笔交易都有日期、项目和美元金额,并按日期排序。

我正在尝试在不编写多个 LLL 数据结构的情况下考虑最好的方法。我有点生疏,所以任何建议将不胜感激。我以前从未在 c++ 中使用过模板,但我想知道这是否是我应该走的方向。

【问题讨论】:

  • 拥有一个保存数据的底层数据结构。然后具有包含指向原始对象的指针的附加数据结构,按您喜欢的顺序排序。底层数据结构和排序后的指针数据结构不必是同一类型(向量、列表等)

标签: c++ oop sorting data-structures


【解决方案1】:

我相信您在问如何编写一个可用于多种不同数据类型的容器类?

根据我对问题的理解,您应该使用的是 STL 向量。 STL 容器类都是模板化的,因此它们可以用于任何数据类型。我建议使用向量类,因为它的排序比链表快得多,而且您没有指定需要链表的任何特定原因。尽管如此,如果需要,您可以使用 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);
}

【讨论】:

    【解决方案2】:

    您可以创建一个基节点类,它只有一个下一个指针和一个相应的链接类(头指针、尾指针、可选的计数),并创建一组列表函数(peekfirst、popfront、pushback、... ) 与该基节点类一起操作。然后您可以添加包含数据的继承类。要将泛型列表函数与继承的类一起使用,您需要将继承的类强制转换为基类。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-28
      • 1970-01-01
      • 2012-05-31
      • 1970-01-01
      • 2013-11-10
      • 2010-09-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多