Как мне вставить список строк (текстовый формат) в контейнер в алфавитном порядке?

#c #containers

#c #контейнеры

Вопрос:

Предположим, у меня есть

 (A,B)
(A,C)
(A,D)
(B,C)
(B,D)
(C,D)
(D,E)
  

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

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

 A->B,C,D
B->C,D
C->D
D->E
  

Какой контейнер я использую?

Мне нужно иметь возможность искать данные как с левой, так и с правой стороны контейнера, т. Е. по ключу и значению. Итак, мне нужно иметь возможность поиска

A, B, C, D в

 A->B,C,D
B->C,D
C->D
D->E
  

и B, C, D в

 A->B,C,D
  

Мне нужно иметь возможность выполнять поиск и вставку как в ключах, так и в значениях для повторения, чтобы, если я получу a (C, E), я мог вставить его, чтобы иметь

 C->D,E
  

Комментарии:

1. Просто используйте map<std::string,std::set> и вспомогательную map для обратного отображения.

2. Как это (A,D) вписывается в ваши ожидаемые данные?

3. Как выбрать между set и map?

4. (A, D) изменил бы столбец, чтобы создать A-> B, C, D

5. Возможно, вам следует обновить свои вопросы, чтобы отразить это тогда, поскольку отображение ожидаемых данных как A->B,C довольно запутанно, учитывая ваш приведенный ввод.

Ответ №1:

A std::vector с одноразовой сортировкой в конце вполне может быть более эффективным, чем что-то вроде std::set (которое будет поддерживать порядок при вставке).

Моим советом было бы выбрать тот, который наилучшим образом соответствует семантике того, что вы хотите сделать, а затем изменить его позже, если вы обнаружите, что это неэффективно.

Комментарии:

1. @Chris: Если ваш новый вопрос действительно соответствует тому, о чем вы хотели, чтобы этот вопрос был, тогда, пожалуйста, просто отредактируйте этот вопрос и удалите новый! (или наоборот …)