하는 방법에 대해 이동 생성 가능한 모든 지도<char, char=""> 조합에서 지도<char, vector<char=""> >?

StackOverflow https://stackoverflow.com/questions/2413533

문제

내가 찾는 것을 map<char, vector<char> > 를 생성하는 각 가능 map<char, char> 습니다.

이용 상당한 양의 메모리고 약간의 시간이 걸릴.

map<char, char> 이 포함되어야 합 모든 문자 a-z 및 매핑할 수 있는 독특한 a-z 문자입니다.ie.ak bj cp dy ev fh ga hb ir jq kn 리 mx nc oo pz qs rl sd te uw vf wg xm yu zt

여기에 제가 결론을 자신이 지금까지:

을 줄이는 어리석의 번호를 가능한 조합하여 낮은 금액을 경우 vector<char> 담보다 더 많은 5 개의 요소에,나는 단순히 교체 vector<char> 을 포함하는 하나의 char 서'주인이'/'원래' map<char, char>.

모든 문자는 존재할 것이 이상의 모든 vector<char>s 지도에서.이러한 문자를 발견해야에 넣어 일부는'다른 사람의 벡터입니다.

이것도 포함되어야 합니다 문자나 문자만이 가능한 캐릭터에 대한 하나 이상의 캐릭터의 키(ie.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
lh
m:gjkpqvxz
n:gjkpquvxyz
o:가
p:gjkpqvxz
q:가
r:dl
s:l
t:e
udgkpuvy
v:cf
w:bcf
x:dguy
y:f
z:에

이것은 시장 지도입니다.후에는 절단 밖으로 큰 문자 벡터의 5 이상으로 대체 최고 추측합니다.어디에이 vector<char> 의 크기는 1,는 캐릭터 맵핑을 만나 조합,그리고 문자를 사용할 수 없습니다 다른 어떤 매핑을 만들 것 같은 그것을 고유하지 않습니다.나는 그것을 손질을:

a:k
b:j
c:p
d:mw
e:v
f:n
g:에
h:c
내:가
j:q
k:r
lh
m:x
n:남자
o:가
p:z
q:가
r:d
s:l
t:e
udguy
v:c
w:bc
x:dguy
y:f
z:에

는'다른 사람을 벡터 포함'o'(나는 그것이 중요하다고 생각하는 이 포함해야 하는 경우 등 mw 에서 위의 예입니다.D 유일한 장소입니다 mw 사용할 수 있습니다,하지만 분명히 필요한 각 문자를 한번만 사용,그중 하나만 사용될 수 있습 떠나,다른 것을 잃었다.나는 확실하지 않는 방법에 대해 이동하는 프로그래밍한 일반적인 경우 추가 이러한 다른 사람에게 벡터입니다.)

내가 찾는 데 도움이고 포인터로 가능한 모든 생성 map<char, char>map<char, vector<char> >s 다음과 같이고에서 이 형식입니다.그들은 사용되는 것에서 인수로는 함수 호출합니다.난 정말 어디에 쓰기 시작하는 뭔가가 일하는 것이 일반적인 의미에서.나는 것 아마 방식과 그것의 큰 금액을 위한 루프를 통해 찾고 모든 요소에 대하여 다른 모든 요소에 대하여 다른 모든 요소...등,나는 가정이 될 것이 매우 비효율적이고 있는 아마도 더 많아 해결하는 방법 이러한 문제입니다.

죄송하는 경우 이것은 너무 벽의 텍스트 틱 또는 지나치게 특정하거나 제대로 작성/물었다.

감사 및 모두 있습니다.

도움이 되었습니까?

해결책

나는 나가는 희망을 내가 필요하지 않은 그들 모두가 동시에 존재합니다.그때 나는 다음을 수행할 수 있습니다.

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 가능성해야하는,비행습니다.사실,당신이 그랬다면 그들이 필요 모든 동시에 당신을 복사할 수 있었는 이전 지도 모든 단계에서,그리고 그것은 없을 정확하게 수행될 때까지 다음 빙.

Btw,당신은 고려하는 지도가 조금 잔 26 가능한 키,각각의 필요에 존재하는 모든까요?벡터 또는 배열 될 것이 상당히 저렴한 사용 및 복사본입니다.

다른 팁

이용 상당한 양의 메모리고 약간의 시간이 걸릴.

예수에 대해 403,291,461,000,000,000,000,000,000:-)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top