Копирование определенных значений между структурами

Используя C++ и не используя функции контейнеров STL, я пытаюсь скопировать значения из одной структуры в другую определенным образом.

У меня есть такая структура (односвязный список), и вот как я добавляю в нее новые элементы:

struct Node {
    Node *next;
    std::string name;
    std::string surname;
};

void AddElement(Node *&head, const std::string &name, const std::string &surname)
{
    head = new Node {head, name, surname};
}

Пример использования:

Node *pointer = nullptr; 
AddElement(pointer, "Alex", "Smith"); 
AddElement(pointer, "Robert", "Johnson"); 
AddElement(pointer, "George", "Smith"); 
AddElement(pointer, "Oscar", "Williams");

У меня также есть другая структура:

struct Result {
    Result *next;
    std::string surname;
};

Я хочу скопировать все значения «фамилии» из первого списка узлов в новый список результатов только один раз для каждого заданного значения «фамилии».

То есть, если у меня есть в моем связанном списке узлов такие фамилии: "Smith", "Johnson", "Smith", "Johnson", "Williams", я хочу, чтобы "Smith", "Johnson", "Williams" был в моем списке результатов.

Я новичок в C++, указателях и структурах. Как мне подойти к этому?

Я не использую стандартные библиотеки. Что же тогда std::string?

john 17.12.2018 08:35

Извините, я имел в виду функции контейнеров STL.

weno 17.12.2018 08:37

это означает отсутствие std::set?

john 17.12.2018 08:39

Ага, точно. Нельзя использовать std :: set, std :: vector и т. д. И их методы.

weno 17.12.2018 08:40

Что ж, способ «грубой силы» - это перебрать ваш исходный список и по каждому пункту спросить себя, добавляли ли вы эту фамилию раньше. Определение того, добавили ли вы фамилию перед тем, как пройти по списку результатов. Таким образом, вы получите один цикл внутри другого. Это некрасиво, но это самый простой подход.

john 17.12.2018 08:46

Просто любопытно: почему нельзя использовать контейнеры std? Цель упражнения? Требование учителя? Недостаточно места во встроенной системе? ...?

Jabberwocky 17.12.2018 10:46
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
6
83
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот возможный алгоритм сокращения поиска без изменения основных определений структур:

Сохраняйте список структур результатов в алфавитном порядке. Всякий раз, когда вы проверяете фамилию, ищите в структурах результатов, пока вы не: (1) Найдите точное совпадение и не добавляйте его (2) Найдите фамилию в алфавитном порядке после той, которую вы ищете. В этом случае добавьте новую фамилию непосредственно перед найденной.

Возможно, это не лучшее или единственное решение, но я предлагаю его как направление.

Другие вопросы по теме