【问题标题】:How to push back a vector into a map<int, vector<int>> [closed]如何将向量推回地图<int,vector<int>> [关闭]
【发布时间】:2023-04-03 11:32:01
【问题描述】:

我在这里要做的是创建这样的地图:

0 -> 0,1,...,4;
1-> 0,1,...,4;
...
9 -> 0,1,...,4;
int main(){
    map<int, vector<int>> m;
    for(int i=0; i<10; i++){
        vector<int> temp;
        for(int j=0; j<5; i++){
            temp.push_back(j);
        }
        m.insert({i, m.push_back(temp)});
    }
}

但是当我尝试推回 temp = {0,1,2,3,4} 向量时,它给了我一个错误。

我猜是下划线的语法有问题。

你能告诉我如何解决这个错误吗?

【问题讨论】:

  • 请不要标记垃圾邮件。这显然不是python。它也不是 C - C 和 C++ 是不同的语言。
  • std::map 没有push_back() 函数?
  • m.insert({i, m.push_back(temp)}); -> m.insert({i, temp});
  • 另外,你在第二个for循环中有错字,应该是for(int j=0; j&lt;5; j++)

标签: c++ c++11 c++14


【解决方案1】:

注意:for(int j=0; j&lt;5; i++){ - 这里的i++ 应该是j++,所以要修复它:

#include <vector>
#include <map>

int main(){
    std::map<int, std::vector<int>> m;

    for(int i=0; i<10; i++) {
        std::vector<int> temp;

        for(int j=0; j<5; j++) { // not i++
            temp.push_back(j);
        }

        m.insert({i, temp}); // not  m.insert({i, m.push_back(temp)});
    }
}

但是,您可以创建 一个 vector&lt;int&gt;,然后将其复制到 map

#include <map>
#include <numeric>
#include <vector>

int main(){
    std::vector<int> tmp(5);
    
    std::iota(tmp.begin(), tmp.end(), 0); // 0,1,2,3,4

    std::map<int, std::vector<int>> m;
    
    for(int i = 0; i < 10; ++i) {
        m.emplace(i, tmp);
    }
}

【讨论】:

    【解决方案2】:

    std::map 没有push_back() 方法。您需要插入您准备好的vector 本身,例如:

    int main(){
        map<int, vector<int>> m;
        for(int i=0; i<10; i++){
            vector<int> temp;
            for(int j=0; j<5; j++){
                temp.push_back(j);
            }
            m.insert({i, temp});
        }
    }
    

    或者,使用map::operator[] 代替map::insert(),让map 为您创建每个vector,例如:

    int main(){
        map<int, vector<int>> m;
        for(int i=0; i<10; i++){
            vector<int> &vec = m[i];
            for(int j=0; j<5; j++){
                vec.push_back(j);
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-03-03
      • 1970-01-01
      • 2016-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 2017-01-20
      相关资源
      最近更新 更多