我有一张矢量地图
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);
}
}
答案 0 :(得分:1)
当然,
&vec = ... <something>
不起作用,因为你无法分配某个变量的地址,但是:
候选函数不可行:没有来自'vector&gt;'的已知转换'const vector&gt;'对于第一个参数矢量&amp; operator =(const vector&amp; __x);
让我感觉你正试图在const
函数中或在应用了一些常量的对象上进行此赋值。请分享更多“原始”代码,以便我们发现错误。
答案 1 :(得分:0)
以下为我工作
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;
}