Разделение строки символов на 2 части по значениям

Предположим у меня есть структура с двумя полями (symbol - строка, хранящая символ; how_many - частота, с которой этот символ встречается в тексте). Я создал массив структур и уже сохранил в каждой структуре в первом поле определённый символ, ему соответствует частота в этой же структуре в переменной how_many. Все символы отсортированы, т.е. первая структура массива структур содержит символ, частота которого превосходит частоту остальных символов, проще говоря сортировка по полю how_many. Теперь передо мной стоит задача следующего характера. Всего у меня 52 структуры, если не ошибаюсь. Теперь мне нужно разделить все 52 символа на две части по частоте. Это значит, что в одной переменной у меня должна храниться какая-то часть из 52 символов, также во второй переменной остальная часть. Но суммарные частоты каждой части должны быть максимально приближены друг к другу по значению. Значит если у меня список символов отсортирован, т.е. в нулевом элементе массива структур хранится символ с наибольшей частотой, то я мог бы сохранить в первую переменную небольшое кол-во высокочастотных символов, а во вторую большое кол-во низкочастотных. По этому принципу я написал код ниже, синтаксических ошибок нет, ругается компилятор и подчёркивает строку half2_symbols += symbols[num].symbol;.

Nmax - размер массива структур. Nnew - переменная, равная переменной Nmax, создана для предотвращения изменения значения в Nmax. all_how_many - суммарная частота всех символов. half_how_many - идеальная половина суммарной частоты всех символов. half1 - переменная для хранения частоты первой части набора символов. half2 - переменная для хранения частоты второй части набора символов. k1 - кол-во символов первой части. k2 - кол-во символов второй части. half1_symbols - строка с символами первой части. half2_symbols - строка с символами второй части.

int num = 0;
    string half1_symbols, half2_symbols;
    int Nnew = Nmax;
    int k1 = 0, k2 = 0;
    int half_how_many = all_how_many / 2, half1 = 0, half2 = 0;
    for (Nnew; Nnew > 0; Nnew--) {
        if (half1 + symbols[Nnew].how_many < half_how_many) {
            half1 += symbols[Nnew].how_many;
            half1_symbols += symbols[Nnew].symbol;
            k1++;
        }
    }
    half2 = all_how_many - half1;
    for (num; num < Nmax - k1; num++) {
        half2_symbols += symbols[num].symbol;
        k2++;
    }

Ответы (0 шт):