我希望获取map<char, vector<char> >
并从中生成每个map<char, char>
。
据我所知,这可能会占用大量内存并花费一些时间。
每个map<char, char>
需要包含每个字母a-z,并映射到唯一的a-z字符。即。
AK
BJ
CP
DY
EV
FH
GA
HB
IR
JQ
KN
里
MX
NC
OO
PZ
QS
RL
SD
TE
UW
VF
WG
XM
宇
ZT
以下是我迄今为止总结的结论:
如果vector<char>
包含超过5个元素,要将可笑组合的数量减少到较低的数量,我只需将其替换为包含来自我的主人的单个字符的vector<char>
'/'原创'map<char, char>
。
并非所有字符都会出现在地图中的所有vector<char>s
上。需要找到这些字符并将其放入某些“其他”向量中。
这也应该包含一个字符,其中一个字符是多个字符键唯一可能的字符(即我正在使用的示例中的mw - 我不确定如何去做)。
此“其他”矢量应用于不可能具有唯一a-z字符的情况,或者多个字符具有相同的单个可能字符的情况。
这是我到目前为止的一个例子。
我将采用map<char, vector<char> >
,例如:
a:gjkpqvxz
b:gjkpqvxz
c:gjkpqvxyz
d:mw
e:gjkpqvxz
f:nr
g:在
h:cf
我:他的
j:gjkpqvxz
k:r
l:h
m:gjkpqvxz
n:gjkpquvxyz
o:是
p:gjkpqvxz
问:是
r:dl
s:l
t:e
你:dgkpuvy
v:cf
w:bcf
x:dguy
y:f
z:at
这是我的起始地图。在删除超过5的大字符向量并用最佳猜测替换它们之后。如果大小为vector<char>
,则该字符映射只有一个组合,并且该字符不能用于任何其他映射,因为它会使其不唯一。我把它修剪成:
a:k
b:j
c:p
d:mw
e:v
f:n
g:在
h:c
我:是
j:q
k:r
l:h
m:x
n:伙计
o:是
p:z
问:是
r:d
s:l
t:e
你:dguy
v:c
w:bc
x:dguy
y:f
z:at
'其他'向量包含'o'(我认为重要的是要注意我认为这应该包含上例中的mw等情况。因为d是mw唯一可以使用的地方,但显然是每个字母只需要使用一次,只能使用其中一个,而另一个字母则丢失。我不知道如何编写一般情况将其添加到其他矢量中。)
我正在寻找帮助和指针,从map<char, char>
生成map<char, vector<char> >s
这样的格式。它们将在函数调用中用作参数。我不确定从哪里开始写一些在一般意义上有效的东西。我可能会用大量的for循环查看每个元素与其他所有元素相对于其他元素等等,我认为这样效率非常低,并且可能有更优雅的方法来解决这样的问题
很抱歉,如果这太过于文字或看起来过于具体或写得不好/被问到。
我感谢任何和所有的帮助。
答案 0 :(得分:1)
我想我希望我不需要它们全部同时存在。然后我可以:
1)通过为每个字母分配第一个可能的元素来创建第一个地图:
for (char c = 'a'; c <= 'z'; ++c) { // yes, I assume ASCII
new_map[c] = old_map[c][0];
}
int indexes[26] = {0};
2)通过重复修改现有地图依次创建剩余的地图:
++indexes[0];
if (indexes[0] < old_map['a'].size()) {
new_map['a'] = old_map['a'][indexes[0]];
} else {
indexes[0] = 0;
new_map['a'] = old_map['a'][0];
// "carry the 1" by applying the same increment process to indexes[1]
}
do_something_with(new_map);
do_something_with
每次都可以从地图重新构建“其他”向量,否则每次更改角色时都可以更新它。替换:
new_map['a'] = something;
使用:
char removed = new_map['a'];
--counts[removed];
if (counts[removed] == 0) others.add(removed);
++counts[something];
if (counts[something] == 1) others.remove(something);
new_map['a'] = something;
在你的剪裁示例中,只有大约6000种可能性,应该飞过。事实上,如果你确实同时需要它们,你可以在每一步都复制上一张地图,直到下一个冰河时代才能完全复制。
顺便说一句,您是否认为只有26个可能的密钥对某个地图有点过分,每个密钥都必须出现在每个地图中?使用和复制矢量或阵列会相当便宜。
答案 1 :(得分:0)
据我所知,这可能会占用大量内存并花费一些时间。
是的,组合数量约为403,291,461,000,000,000,000,000,000,000: - )