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
4

3 に答える 3

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;
}
于 2013-08-13T13:01:43.260 に答える
0

コードは常に vecUser[j].AccessLevel を出力します

最後のケースで vecDB[i] を印刷したかったことを願っています

これは次のように書くことができます

if(vecDB[i].Accesslevel <= vecUser[j].AccessLevel)
   ss << vecUser[j].AccessLevel << endl;
else
   ss << vecDB[i].AccessLevel << endl;
于 2013-08-13T12:54:57.340 に答える
0

StringStream obj に挿入する代わりに、別のベクトルを使用してデータを挿入できます。次に、ベクトルに対してソートアルゴリズムを使用します。

于 2013-08-13T13:01:36.463 に答える