推回数据从矢量到矢量的地图

pushback data from vector to vector of map

本文关键字:地图 数据      更新时间:2023-10-16

我创建了一个名为select_p的映射,这个映射的向量称为pts。我已经将数据存储在一个数组中,我想将这些数据推入映射向量中。我试着把数组的值插入到新的向量中,然后再推到我的地图中。但是它不能工作,请帮我纠正这些代码?由于

#include<iostream>
#include<cstdlib>
#include <map>
#include <vector>
using namespace std;
int main()
{
    int M=7;
    int N=6;
    int i=0;
    int * temp;
    map<int,vector<int> > select_p;
    vector<int>pts;
    for (int m=0; m<M; m++)
    {
        for (int n=0; n<N; n++)
        {
            vector<int>id;
            if (n==0 && m==5)
            {
               temp = new int[3,i+N,i+N+1,i+1];
               unsigned ArraySize = sizeof(temp) / sizeof(int);
               id.insert(id.begin(),temp[0], temp[ArraySize]);
               select_p[i].push_back(id);
            }
            i++;
        } 
    }
    delete[] temp;
    system("PAUSE");   
    return 0;   
}
for (int m=0; m<M; m++) {
    for (int n=0; n<N; n++) {
        if (n==0 && m==5) {

当你实际上只对mn的单个值做任何事情时,为什么要循环?这里的循环完全没用;你可以通过设置n = 0m = 5来获得相同的效果。

temp = new int[3,i+N,i+N+1,i+1];

不管你认为它是做什么的,它不是这样做的。这相当于temp = new int[i+1];[]表达式的其余部分不起作用。

也就是说,不应该在程序中使用new来创建数组。使用std::vector;

unsigned ArraySize = sizeof(temp) / sizeof(int);

这不起作用。当您动态分配一个数组时,您有责任跟踪其中有多少个元素。给定一个指针指向一个动态分配的数组(如这里的temp),无法确定数组中元素的数量。

你所拥有的相当于sizeof(int*) / sizeof(int),它不会做你所期望的。

id.insert(id.begin(),temp[0], temp[ArraySize]);

std::vector::insert接受一系列迭代器:您已经为它提供了两个值。假设您想使用temp,它指向动态分配的数组的初始元素,而temp + i + 1,它指向数组末尾的后面。也就是说,由于您没有设置数组中元素的值,因此您正在复制未初始化的内存,这可能不是您想要做的。

select_p[i].push_back(id);

select_p[i]std::vector<int>std::vector<int>::push_back()接受附加到序列的单个int。你大概是想用赋值把id赋值给select_p[i]

如果你想学习c++编程,你应该找一本很好的c++入门书。我很遗憾地说,你的计划毫无意义。