![](/img/trans.png)
[英]no matching function for call to std::vector<std::tuple> push_back
[英]error: no matching function for call to 'std::vector<float>::push_back(std::vector<float>&) const'
我正在尝试将 map (m) 值复制到向量 (v) 中
map 是这样声明的:
const map<int, vector<float> >& m = ....;
我试过这个:
const vector<float>& v;
for(auto elem : m)
v.push_back(elem.second);
我收到此错误:
错误:没有匹配的 function 调用 'std::vector::push_back(std::vector&) const'
你所做的事情的目的有点不清楚,但如果你想制作一个vector<float>
来保存map
中所有向量中的所有值,你可以这样做,但你不能push_back
一个vector<float>
直接,这是您收到错误的原因之一:
error: no matching function for call to 'std::vector::push_back(std::vector&) const'
您可以将float
值一一推回 - 或使用vector::insert
成员push_back
将所有元素插入一个 go (看起来您正在尝试这样做)。
另一个原因是v
是const
,这意味着在它被初始化后,您不能对其进行更改。
一些注意事项:
map
和vector
作为const&
s。 这有效并延长了临时map
和您以这种方式创建的vector
的生命周期 - 但作为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());
}
你的 map 类型是: int, vector<float>
这意味着你的值是floats
的vector
类型。 你的向量有浮点类型。 您不能在向量的一个元素中 push_back 向量的浮点数。 你需要这样做。
vector<float> v;
for(auto elem : m)
{
for(auto f : elem.second)
v.push_back(f);
}
或类似的事情取决于你想如何使用你的价值观。
您正在尝试将向量推送到向量,这是没有意义的。 object 不能是其自身的元素。
将其更改为:
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;
}
}
你尝试将 VECTOR 推到向量你需要 Vector of Vector 才能工作你的元素是向量,变量 v 是一个向量你需要 vector<vector>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.