Почему мой вектор типа <bool>хранит только 1 с? - PullRequest
0 голосов
/ 08 мая 2019

Я пытаюсь перевести строку в кодировку Хаффмана, используя карту Хаффмана, которая хранится в unordered_map<char, string>.Как вы можете видеть, он печатает правильно, где я помещаю его, но после того, как я push_back() закодировал результат, а затем распечатал его, он отображается как 1 с вместо 1 с 0.Есть идеи?

Я попытался распечатать и расшифровать.

vector<bool> result{};
for (auto i : huffmanMap)
{
    cout << i.first << ": " << i.second << "*" << endl;
}
for (auto word: text)
{
    cout << word << endl;
    for (auto ch : word)
    {
        cout << "char: " << ch << " encoding: "<< huffmanMap[ch] << 
        endl;
        for (auto binarych: huffmanMap[ch])
        {
            cout << "binarych " << binarych << endl;
            result.push_back(binarych);
        }
    }
}
for (auto next: result)
{
    cout << next;
}
cout << endl;
return result;

a: 0*
c: 10*
b: 11*
aaabbc
char: a encoding: 0
binarych 0
char: a encoding: 0
binarych 0
char: a encoding: 0 
binarych 0
char: b 
encoding: 11
binarych 1
binarych 1
char: b 
encoding: 11
binarych 1
binarych 1
char: c encoding: 10
binarych 1
binarych 0
111111111

1 Ответ

1 голос
/ 08 мая 2019

Вы путаете цифры и цифры.

'0' и '1' не являются 0 и 1, и оба значения '0' и '1' преобразуются в true.

Вы можете преобразовать цифру в число, которое она представляет, вычитая из нее '0':

result.push_back(binarych - '0');

Цифры требуются С ++ для кодирования в порядке возрастания без "пробелов".

...