【问题标题】:Organise output data according to an order按顺序组织输出数据
【发布时间】:2013-08-13 21:07:22
【问题描述】:

我想整理以下代码的输出。请告知我该如何处理。

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

【问题讨论】:

  • 这里的部分问题肯定是你输出vecUser[j].Accesslevel,不管它之前的条件是什么。
  • vecDBi].AccessLevel 无效。发布您的真实测试用例。

标签: c++ optimization vector


【解决方案1】:

首先,你的逻辑搞砸了:

  • 如果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 级再次重复。但是,我想在打印之前根据用户级别对其进行检查和排序。 “TblYY 的用户 James 的访问级别为 0”。这是我要打印的消息。那么如何对字符串进行排序并打印出来。
  • 上面指出的循环是做检查的,但是,做缩短代码,我没有显示完整的句子。
【解决方案2】:

您的代码总是打印 vecUser[j].AccessLevel

我希望你想在最后一种情况下打印 vecDB[i]

这可以写成

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 它将包含诸如“TblYY has user James with Acces level0”之类的字符串,它是否仍然可以排序。如果我将字符串存储为向量。
    • "TblYY 有用户 James 的访问级别为 0" "TblEE 有用户 Mkie 的访问级别为 1" 这还能排序吗?
    猜你喜欢
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    • 2021-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多