Несколько отсортированных списков

0

Я пытаюсь думать о лучшем способе, чтобы несколько наборов данных использовали один и тот же Linear Linked List. Каждый набор данных будет иметь уникальную информацию, которая будет храниться, и каждый из них будет отсортирован в определенном порядке. Например, у меня может быть список людей, который содержит их имя, адрес и номер телефона и сортируется по их имени в алфавитном порядке. И тогда у меня может быть список транзакций, в которых каждая транзакция имеет дату, элемент и сумму в долларах и сортируется по дате.

Я пытаюсь придумать лучший способ сделать это без написания нескольких структур данных LLL. Я немного ржавый, поэтому любые предложения были бы весьма признательны. Я никогда раньше не использовал шаблоны в c++, но мне интересно, так ли это направление, в котором я должен идти.

  • 0
    Имейте основную структуру данных, которая содержит данные. Затем добавьте дополнительные структуры данных, которые содержат указатели на исходные объекты, отсортированные в нужном вам порядке. Базовая структура данных и отсортированные указатели данных не обязательно должны быть одного типа (вектор, список и т. Д.)
Теги:
sorting
data-structures
oop

2 ответа

0

Вы можете создать класс базового узла, который имеет только следующий указатель и соответствующий класс ссылок (указатель на голову, указатель хвоста, опционально кол-во) и создать набор функций списка (peekfirst, popfront, pushback,...), которые работают с этим классом базового узла. Затем вы можете добавить унаследованные классы, которые будут включать данные. Чтобы использовать общие функции списка с унаследованными классами, вы должны отнести унаследованные классы к базовому классу.

0

Я полагаю, вы спрашиваете, как написать один класс контейнера, который может использоваться для нескольких разных типов данных?

Основываясь на моем понимании проблемы, вы должны использовать 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, "[email protected]"));
    vecPeople.push_back(Person("Adam", 20, "[email protected]"));
    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);
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню