错误:调用"std::vector<float>::p ush_back(std::vector<float>&) const"没有匹配函数



我正在尝试将map (m)值复制到vector (v)

map是这样声明的:

const map<int, vector<float> >& m = ....;

我试过了:

const vector<float>& v;
for(auto elem : m)
v.push_back(elem.second);

我得到这个错误:

错误:没有匹配的函数调用std::vector::push_back(std::vector&) const'

你所做的目的有点不清楚,但如果你想让vector<float>保存map中所有向量中的所有值,你可以这样做,但你不能直接push_backavector<float>,这是你得到错误的原因之一:

error: no matching function for call to 'std::vector::push_back(std::vector&) const'

您可以一个一个地push_backfloat值-或者使用vector::insert成员函数一次性插入所有元素(看起来您正在尝试这样做)。

另一个原因是vconst,这意味着在它被初始化之后,你不能对它进行更改。

一些注意事项:

  • 您已经将mapvector创建为const&s。这可以工作并延长您以这种方式创建的临时mapvector的生命周期-但是作为const,您不能更改它们中的任何一个。我建议你至少删除vector上的参考,并使其非const,以便能够填充它。

例子:

#include <map>
#include <vector>
int main() {
const std::map<int, std::vector<float>> m { {1, {2,3,4}} };
std::vector<float> v;
for(auto& elem : m) {
// insert the vector values from this map-entry at the end of `v`
v.insert(v.end(), elem.second.begin(), elem.second.end());
}
}

auto& elem而不是auto elem。后者复制数据(这可能是昂贵的),而auto& elem通过引用获取数据。

使用结构化绑定,填充循环看起来像这样:
for(auto&[first, second] : m) {
v.insert(v.end(), second.begin(), second.end());
}

你试图将一个向量推入另一个向量,这是没有意义的。对象不能是自身的元素。

改为:

const map<int, float>& m = ....;

for(auto elem : m)
{
int i = 0;
while(i < elem.second.size())
{
v.push_back(elem.second[i]);
i += 1;
}
}

你的地图类型是:int, vector<float>这意味着您的值是floatsvector类型。你的向量是浮点型的。不能在vector的一个元素中push_back vector或float。你必须这么做。

vector<float> v;
for(auto elem : m)
{
for(auto f : elem.second)
v.push_back(f);
}

或类似的东西取决于你想如何使用你的值。

您尝试将VECTOR推到VECTOR,您需要VECTOR的VECTOR才能工作元素是矢量,变量v是矢量,需要vector

最新更新