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

您可以使用另一个向量来插入数据,而不是插入到 StringStream obj 中。然后对向量使用排序算法。

于 2013-08-13T13:01:36.463 回答
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 回答