簡體   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