如何将矢量推回地图<int, vector<int>>

How to push back a vector into a map<int, vector<int>>

我想在这里做的是创建一个这样的地图:

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} 向量时,它给我一个错误。

估计下划线的语法有问题

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

注意:for(int j=0; j<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)});
    }
}

但是您可以创建 one vector<int> 并将其复制到 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);
    }
}

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);
        }
    }
}