Я пытаюсь думать о лучшем способе, чтобы несколько наборов данных использовали один и тот же Linear Linked List. Каждый набор данных будет иметь уникальную информацию, которая будет храниться, и каждый из них будет отсортирован в определенном порядке. Например, у меня может быть список людей, который содержит их имя, адрес и номер телефона и сортируется по их имени в алфавитном порядке. И тогда у меня может быть список транзакций, в которых каждая транзакция имеет дату, элемент и сумму в долларах и сортируется по дате.
Я пытаюсь придумать лучший способ сделать это без написания нескольких структур данных LLL. Я немного ржавый, поэтому любые предложения были бы весьма признательны. Я никогда раньше не использовал шаблоны в c++, но мне интересно, так ли это направление, в котором я должен идти.
Вы можете создать класс базового узла, который имеет только следующий указатель и соответствующий класс ссылок (указатель на голову, указатель хвоста, опционально кол-во) и создать набор функций списка (peekfirst, popfront, pushback,...), которые работают с этим классом базового узла. Затем вы можете добавить унаследованные классы, которые будут включать данные. Чтобы использовать общие функции списка с унаследованными классами, вы должны отнести унаследованные классы к базовому классу.
Я полагаю, вы спрашиваете, как написать один класс контейнера, который может использоваться для нескольких разных типов данных?
Основываясь на моем понимании проблемы, вы должны использовать 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);
}