【问题标题】:Using multimap and struct in C++在 C++ 中使用 multimap 和 struct
【发布时间】:2016-08-02 21:05:39
【问题描述】:
typedef struct
{
string idArtigo;
string tituloArtigo;
string veiculoPublicacao;
vector<string> autores;
}Publicacao;

我有一个像这样的向量:

vector<Publicacao> pub(1000);

和:

multimap<int,Publicacao> multimapa;   
multimap<int,Publicacao>::iterator it;

我正在使用插入添加:

multimapa.insert ( pair<int,Publicacao>(i,p[i]));
multimapa.insert ( pair<int,Publicacao>(i,p[j]));

问题是,当我打印时,我无法打印结构的向量 autores,只能打印其他变量,例如:

    for (it=multimapa.begin(); it!=multimapa.end(); ++it)
    {
    arquivoResultado<<"Codigo Unico: "<< (*it).first<<endl;  //works
    arquivoResultado<<"Titulo: "<<(*it).second.tituloArtigo<<endl; //works
    arquivoResultado<<"Autores: "<<endl; // works
    for(i=0; (*it).second.autores.size(); i++) // NOT WORKS
    {
        arquivoResultado<<(*it).second.autores[i]<<" "; //FAIL EXECUTION

    } 
    arquivoResultado <<"\nVeiculo: "<<(*it).second.veiculoPublicacao<<endl;                             
}

只是结构的向量在执行时间上有问题,我不知道为什么。

【问题讨论】:

  • 你是不是缺少一些语法?喜欢i &lt; (*it).second.autores.size();
  • 甚至没有 arquivoResultado
  • 你能提供一个minimal reproducible example吗?
  • 等等,它现在工作了: or(int i=0; i
  • 并且不要在 C++ 中使用typedef struct

标签: c++ vector insert multimap


【解决方案1】:

您的for loop 的结构不完整。它应该类似于以下内容:

for(int i = 0; i < (*it).second.autores.size(); i++) // missing "i < " and the declaration of i
{
    arquivoResultado << (*it).second.autores[i] << " ";
}

【讨论】:

    【解决方案2】:

    在您的示例中,当向量的大小大于零时循环,这将永远是真或假。正如您在评论中所写,一旦您将其更改为循环,而索引小于它开始正常工作的大小。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-21
      • 1970-01-01
      • 2010-11-16
      相关资源
      最近更新 更多