繁体   English   中英

错误:没有匹配的 function 调用 'std::vector<float> ::push_back(std::vector<float> &amp;) 常量'</float></float>

[英]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 (看起来您正在尝试这样做)。

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

一些注意事项:

  • 您已经创建了mapvector作为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>这意味着你的值是floatsvector类型。 你的向量有浮点类型。 您不能在向量的一个元素中 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM