c++从向量映射中获取一个向量

c++ get a vector from a map of vectors

本文关键字:向量 一个 获取 映射 c++      更新时间:2023-10-16

我有一张矢量的地图

map< int, vector<float> > hit = getAlignedHits();

我想让矢量与特定的密钥配对,例如:

vector<float> vec;
vec = hit[1];

我得到的错误是:

候选函数不是可行:没有已知的从vector<float, allocator<float>>const vector<double, allocator<double>>的转换第一个自变量vector& operator=(const vector& __x);

我在下面试过,没有成功:

    &vec =  hit[1];

错误:表达式不可分配

我也试过下面的,没有成功:

    map< int, vector<float> >::iterator itr;
    itr = hit.find(1);
    &vec =  itr->second;

错误:表达式不可分配

有人知道为什么这些不起作用吗,以及我如何从地图中获得矢量?

提前感谢

编辑:以下是getAlignedHits的作用以及我在那里使用的变量:

const int NLayer = 6;,  vector<float> *hit_position; double alignmentpar[NLayer];

 map< int, vector<float> > getAlignedHits(){
    double newpos;
    for (int i=0; i<NLayer; i++) {
        vector<float> bla;
        bla.clear();
        hit[i] = bla;
    }
    for (unsigned int ihit=0; ihit<layerID->size(); ihit++) {
        newpos = hit_position->at(ihit) - alignmentpar[layerID->at(ihit)];
        hit[layerID->at(ihit)].push_back(newpos);
    }
 }

当然,

 &vec =  ... <something>

不会起作用,因为你不能给变量的地址分配一些东西,但是:

候选函数不可行:对于第一个参数vector&运算符=(const vector&__x);

给我的感觉是,你试图在const函数中或在应用了一些常量的对象上进行此赋值。请分享更多"原始"代码,以便我们能够发现错误。

以下适用于我的

std::vector<float> & h0 = hit[0];

或更简单的

auto & h0 = hit[0];

的完整示例

#include <map>
#include <vector>
#include <iostream>
int main()
 {
   std::map< int, std::vector<float> > hit { { 0, {} } };
   std::vector<float> & h0a = hit[0];
   auto & h0b = hit[0];
   h0a.push_back(2.3);
   std::cout << hit[0].front() << std::endl;
   std::cout << h0a.front() << std::endl;
   std::cout << h0b.front() << std::endl;
   return 0;
 }