2013-08-13 4 views
0

Я хотел бы организовать вывод следующего кода. Просьба сообщить, как я могу действовать.Организуйте выходные данные в соответствии с заказом

StringStream ss; 

for (i = 0; i < vecDB.size(); i++) { 
    for (j = 0; j < vecUser.size(); j++) { 
     if (vecDB[i].AccessLevel == vecUser[j].Accesslevel) { 
      ss << vecUser[j].Accesslevel << endl; 
     } else if (vecDB[i].AccessLevel < vecUser[j].Accesslevel) { 
      ss << vecUser[j].Accesslevel << endl; 
     } else if (vecUser[j].Accesslevel < vecDBi].AccessLevel) { 
      ss << vecUser[j].Accesslevel << endl; 
     } 
    } 
} 

cout << ss.str(); 

Выходной ток

Level0 
Level3 
Level2 
Level4 
Level0 
Level0 
Level1 
Level4 
Level2 
Level3 

Желаемая Выход

Level0 
Level0 
Level0 
Level1 
Level2 
Level2 
Level3 
Level3 
Level4 
Level4 
+2

Несомненно, проблема заключается в том, что вы выводите 'vecUser [j] .Accesslevel' независимо от того, какое условие перед ним. –

+0

'vecDBi] .AccessLevel' недопустим. Отправьте свой тестовый файл _real_. –

ответ

2

Прежде всего, ваша логика перепутались:

  • Если vecUser[j] == vecDBi[i] затем выход vecUser[j].Accesslevel
  • Если vecUser[j] < vecDBi[i] затем выход vecUser[j].Accesslevel
  • Если vecUser[j]>vecDBi[i] затем выход vecUser[j].Accesslevel
  • Если ничего из вышесказанного, то вывод vecUser[j].Accesslevel

Независимо от того, что вы всегда выпускаете vecUser[j].Accesslevel.

Другими словами, вы можете заменить это:

if (vecDB[i].AccessLevel == vecUser[j].Accesslevel) { 
    ss << vecUser[j].Accesslevel << endl; 
} else if (vecDB[i].AccessLevel < vecUser[j].Accesslevel) { 
    ss << vecUser[j].Accesslevel << endl; 
} else if (vecUser[j].Accesslevel < vecDBi].AccessLevel) { 
    ss << vecUser[j].Accesslevel << endl; 
} 

со следующим и еще получить тот же результат.

ss << vecUser[j].Accesslevel << endl; 

Я не знаю, чего вы хотите достичь с помощью этой логики, но пока она сломана.


Если вы просто хотите вывести строки в порядок, то почему бы не просто отсортировать их?

std::vector<std::string> sorted{std::begin(vecUser), std::end(vecUser)}; 
std::sort(std::begin(sorted), std::end(sorted)); 

for (const auto& s : sorted) { 
    std::cout << s << std::endl; 
} 
+0

Я автоматически сравниваю уровень доступа к таблице БД и уровень доступа пользователя и распечатываю имя-табло и пользовательский уровень доступа.Для конкретной таблицы могут быть разные пользователи с одинаковым уровнем доступа. То, что уровень 0 снова повторяется. Однако я бы хотел проверить и отсортировать его до уровня пользователя перед его печатью. «У TblYY есть пользователь Джеймс с Acces level0». Это сообщение, которое я пытаюсь напечатать. Итак, как я могу отсортировать строку и распечатать ее. –

+0

Цикл, указанный выше, должен сделать проверку, однако, укоротить код, я не отобразил полное сообщение. –

0

Ваш код всегда печатает vecUser [J] .AccessLevel

Я надеюсь, что вы хотели напечатать vecDB [i] в ​​l аст случай

это можно записать в виде

if(vecDB[i].Accesslevel <= vecUser[j].AccessLevel) 
    ss << vecUser[j].AccessLevel << endl; 
else 
    ss << vecDB[i].AccessLevel << endl; 
0

Вы можете использовать другой вектор для вставки данных вместо вставки в StringStream OBJ. Затем используйте алгоритм sort на векторе.

+0

Он будет содержать строку, такую ​​как «TblYY имеет пользователя Джеймс с Acces level0», он может быть отсортирован. Если я сохраню строку вектором. –

+0

«У TblYY есть пользователь Джеймс с Acces level0» «У TblEE есть пользователь Mkie с уровнем Acces1» Может ли это быть отсортировано. –

Смежные вопросы