Ошибка при выводе индексов массива

Сделала функцию для формирования индексов строк (по возрастанию), должно получиться так:

2. Пушкин А.С. «Евгений Онегин»
5. Тургенев И.С. «Отцы и дети»
1. Логинов С.В. «Свет в окошке»
2. Пушкин А.С. «Евгений Онегин»
3. Стругацкий Б.Н., Стругацкий А.Н. «Понедельник начинается в субботу»
6. Янссон Т.С. «Волшебная зима»
5. Тургенев И.С. «Отцы и дети»
4. Толстой Л.Н. «Война и мир»

то , что получилось у меня :

1       Пушкин А.С. <Евгений Онегин>
5       Тургенев И.С. <Отцы и дети>
0       Логинов С.В. <Свет в окошке>
1       Пушкин А.С. <Евгений Онегин>
3       Стругацкий Б.Н., Стругацкий А.Н. <Понедельник начинается в субботу>
7       Янссон Т.С. <Волшебная зима>
5       Тургенев И.С. <Отцы и дети>
4       Толстой Л.Н. <Война и мир>

Так , archive.size()- это размер массива векторов , в каждом векторе какой-то русский текст, k - обозначает номер строки (по алфавиту) , numbers[i] - это вектор с числами , ему присваивается номер (для дальнейшего вывода на экран ) Цикл сравнивает строчки , и соответственно формирует индексы для них (если равные строки , то индексы равны)

P.S Проблема в том ,что цикл может сравнивать i-ую строчку с j-ой несколько раз(в том случае если будет найдена строчка , равная j-ой) и k увеличивается на единицу несколько раз , что неправильно . Короче говоря если мы 1) находим i-ый элемент и он больше j-го элемента, 2) этот j-ый элемент равен какому то другому элементу(строчке , назовем p) , то потом , когда встретим p элемент , мы уже не должны сравнивать i-ый элемент с p и прибавлять единицу к номеру k

for (int i = 0; i < archive.size(); i++) 
{
    k = 1;
    for (int j = 0; j < i; j++) 
    {
        if (archive[i]>archive[j])
            k++;
    }
    for (int j = i + 1; j < archive.size(); j++) 
    {
        if (archive[i]>archive[j])
            k++;
    }
    numbers[i] = k;
}

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