Я хочу взять map<char, vector<char> >
и сгенерировать из него каждое возможное map<char, char>
.
Я понимаю, что это может занять значительный объем памяти и занять немного времени.
Каждая map<char, char>
должна содержать каждую букву a-z и сопоставляться с уникальным символом a-z. то есть.
Аляска
Ь
ср
ду
эв
ФХ
Джорджия
ро
инфракрасный
JQ
кп
литий
тх
Северная Каролина
оо
пз
Достаточное количество
гх
SD
тэ
ию
В.Ф.
Рабочая группа
хт
юй
ZT
Вот что я уже сделал для себя:
Чтобы сократить смешное количество возможных комбинаций до меньшего количества, если vector<char>
содержит более 5 элементов, я просто заменю его на vector<char>
, содержащий один символ из моего оригинала 'master' / ' 'map<char, char>
.
Не все символы будут присутствовать над всеми vector<char>s
на карте. Эти символы должны быть найдены и помещены в некоторый вектор «других».
Это также должно содержать символы, где один символ является единственным возможным символом для более чем одной символьной клавиши (т. Е. Mw в примере, из которого я работаю - я не уверен, как это сделать).
Этот «чужой» вектор следует использовать для случаев, когда невозможно иметь уникальный символ a-z или если несколько символов имеют один и тот же возможный символ.
Вот пример того, что у меня есть.
Я буду принимать map<char, vector<char> >
, например:
a: gjkpqvxz
b: gjkpqvxz
c: gjkpqvxyz
д: мвт
e: gjkpqvxz
f: nr
г: в
ч: ср
я: его
j: gjkpqvxz
k: r
л: ч
m: gjkpqvxz
n: gjkpquvxyz
o: is
p: gjkpqvxz
q: is
r: dl
с: л
т: е
u: dgkpuvy
v: cf
w: bcf
x: dguy
y: f
z: на
Это моя стартовая карта. После вырезания больших векторов символов более 5 и замены их на лучшее предположение. Если значение vector<char>
размера 1, то это сопоставление символов имеет только одну комбинацию, и этот символ нельзя использовать ни в каком другом сопоставлении, поскольку это сделает его не уникальным. Я урезал его до:
a: k
b: j
с: р
д: мвт
e: v
f: n
г: на
ч: с
я: это
j: q
к: г
л: ч
м: х
n: guy
o: is
p: z
q: is
р: д
с: л
т: е
u: dguy
V: C
w: bc
x: dguy
y: f
z: на
Вектор 'others' содержит 'o' (я думаю, важно отметить, что я думаю, что он должен содержать такие случаи, как mw из приведенного выше примера. Поскольку d - это единственное место, где можно использовать mw, но, очевидно, с нужно, чтобы каждая буква использовалась только один раз, можно использовать только одну, оставляя другую где-то потерянной. Я не уверен, как программировать общий случай, чтобы добавить их в вектор других.)
Я ищу помощь и указатели для генерации всех возможных map<char, char>
из map<char, vector<char> >s
, как это и в этом формате. Они будут использоваться в качестве аргумента в вызове функции. Я не совсем уверен, с чего начать писать что-то, что будет работать в общем смысле. Я, вероятно, подхожу к этому с большим количеством циклов for, просматривающих каждый элемент против каждого другого элемента против любого другого элемента ... и т. Д. И т. Д., Что, я полагаю, будет крайне неэффективным, и, вероятно, есть гораздо более элегантные способы решения такой проблемы .
Извините, если это слишком много текста или кажется слишком конкретным или плохо написано / спросили.
Я ценю любую помощь.