【问题标题】:How to print vector<map<string, int> > in C++如何在 C++ 中打印矢量<map<string, int>>
【发布时间】:2018-05-08 07:13:36
【问题描述】:

vector &lt; map&lt; string, int &gt; &gt; 中输入。

当我知道vector的索引时,我只想打印出map的字符串,但它不起作用。

发生错误

cout<< myVec.at(intTmp)->first<<"\n";

我不确定如何访问矢量内的地图。

 #include <iostream>
 #include <string>
 #include <map>
 #include <vector>
using namespace std;

int N, M;
vector<map<string, int> > myVec;

bool isDigits(string& s){

  for(int i=0; i<s.size(); ++i){
      if(!isdigit(s[i])) return false;
  }
    return true;
}


int main()
{
    cin >> N >> M;

    for(int i=1; i<=N; ++i){
        string tmp;
        cin.clear();
        getline(cin, tmp);
        myVec.emplace_back(tmp, i);
    }

    for(int i=1; i<=M; ++i){
        string tmp1;
        cin.clear();
        getline(cin, tmp1);
        if(isDigits(tmp1)){
            int intTmp = atoi(tmp1.c_str());
            cout<< myVec.at(intTmp)->first<<"\n";
        }
    }

    return 0;
}

【问题讨论】:

  • 看起来您将地图用作单个键值对。为此使用std::pair
  • myVec[anyIndex] 不是指针或迭代器。这是一个map&lt;string, int&gt; 对象
  • 我选择 map 是因为我需要使用 find() 函数。 pair 没有 find() 函数。此代码仅包含打印部分,但我需要 find() 来避免使用搜索功能。
  • “需要使用 find()”是什么意思?你需要在向量中找到特定的元素吗?还是在地图上?您仍然可以使用 vector&lt;pair&lt;string, int&gt; 找到向量的元素。
  • vector >::iterator vecIter = myVec.begin()+index; // 这行得通吗?

标签: c++ dictionary vector iterator


【解决方案1】:

使用这个sn-p:

for(auto map2:myVec)
{   
   for(auto it = map2.begin();it != map2.end();it++)
    cout << (it->first).c_str() << " " << it->second <<endl;
}

【讨论】:

    【解决方案2】:

    这是一张你必须在地图上迭代的地图

    vector< map<string,int> > myVec;
    for( int i=0; i< myVec.size(); i++) {
        for(auto it = myVec[i].begin(); it != myVec[i].end(); it++) {
            cout<<it->first;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2023-03-12
      • 2023-03-17
      • 2017-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-31
      • 1970-01-01
      相关资源
      最近更新 更多