【问题标题】:Print 2 for loops next to each other相邻打印 2 个 for 循环
【发布时间】:2021-08-31 17:14:45
【问题描述】:

我想知道如何将 2 个 for 循环并排打印出来?

这些是循环:

for(vector<Student>::iterator it = studenti.begin(); it != studenti.end(); ++it)
        cout << "| " << it->brojIndeksa << "          " << it->ime << "  " << it->prezime;
for(map<string,string>::iterator it = ocjene.begin(); it!= ocjene.end(); ++it)
        cout << "     " << it->first << " - " << it->second << endl;

我想要的输出:

| brojIndeksa ime prezime first - second

| brojIndeksa ime prezime first - second

| brojIndeksa ime prezime first - second

我的输出:

| brojIndeksa          ime  prezime| brojIndeksa          ime  prezime     first - second
     first - second

编辑:

struct Predmet {
    string naziv;
    string odsjek;
    istream& dodaj_predmet(istream &);
    void sort_predmeti();
};

struct Student {
    string brojIndeksa;
    string ime;
    string prezime;
    map<std::string, string> ocjene;
    istream& dodaj_studenta(istream &);
    void sort_studenti();
};

map&lt;std::string, string&gt; ocjene 包含 2 个输入字符串,第一个必须是来自 Predmet 结构的 naziv

新输出:

| 1808 John Doe EJ 10

| PIM 10

| 1809 Jessica Doe PIM 10

【问题讨论】:

  • 地图和矢量的元素数量相等?
  • 我发现使用 std::stringstream 简化了这项工作。考虑 std::stringstream leftColumn; std::stringstream 右列;然后以通常的方式填充每一列,接下来,对于每一行,做一个 std::cout
  • 我不明白,你能解释一下它在我的例子中是如何工作的吗?

标签: c++ loops for-loop output


【解决方案1】:

您可以在同一个循环中使用两个迭代器进行迭代:

auto studenti_it = studenti.begin();
auto ocjene_it = ocjene.begin();

for (; studenti_it != studenti.end() && ocjene_it != ocjene.end(); ++studenti_it, ++ocjene_it)
{
    // Print using both iterators...
}

在您进行编辑后,我们看到地图是 Student 结构的成员,我猜测您想要的是首先迭代 @ 987654324@ 向量,然后在其中有一个Student::ocjene 映射的循环?

然后你会有类似的东西

// First iterate over the vector
for (auto const& student : studenti)
{
    std::cout << "| " << student.brojIndeksa << "          " << student.ime << "  " << student.prezime << '\n';

    
    // Then inside iterate over the map
    for (auto const& oj : student.ocjene)
    {
        std::cout << '\t' << oj.first << ' ' << oj.second << '\n';
    }
}

【讨论】:

  • 之前尝试过,但一切都搞砸了,ocjene_it->首先进入另一个用户条目。示例:1 John Doe IT(随机花花公子的条目)7 2 随机花花公子编程 -(其他人的条目)9 3 其他人视频编辑 -(john doe 的条目)10
  • @Wolfhrat 问题是 std::map 在键上是 ordered 的,因此它可能与向量的顺序不同.向量结构Student 的任何元素是否用作地图的键?然后只遍历向量,并使用Student 成员作为键从地图中获取数据。
  • 实际上,Student结构中的map&lt;string,string&gt;(第一个字符串输入)依赖于Predmet结构中的string naziv,所以如果输入的字符串在Predmet结构中不存在,我会得到一个错误。我可以用那个东西来迭代这两个循环吗?
  • @Wolfhrat 请编辑您的问题,向我们展示正确的minimal reproducible example。尤其是Student 结构的外观,以及它与地图的连接方式。
  • 这里,如果您需要任何其他详细信息,请告诉我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-10
  • 1970-01-01
  • 2020-11-12
  • 1970-01-01
  • 2020-06-18
相关资源
最近更新 更多