【问题标题】:Push_back map into vectorPush_back 映射成向量
【发布时间】:2015-10-19 05:05:27
【问题描述】:

如何将std::map 元素推回std::vector

std::vector<std::map<int, int>> v;

// Error
v.push_back(std::make_pair(0, 1))

是什么导致了这个错误?

【问题讨论】:

    标签: c++ dictionary vector


    【解决方案1】:

    使用

    v.push_back(std::make_pair(0, 1))
    

    是一个问题,因为 std::pair 无法转换为 std::map。您可以使用我能想到的以下方法之一来解决问题。

    方法一

    如果你可以使用 C++11 编译器,

    v.push_back({{0, 1}});
    

    方法二

    std::map<int, int> m;
    m.insert(std::make_pair(0, 1));
    v.push_back(m);
    

    方法3

    std::map<int, int> m;
    v.push_back(m);
    v.back().insert(std::make_pair(0, 1));
    

    【讨论】:

    • {{ }} 是做什么的?
    • @user963241,它可以使用initialization_list构造一个std::map。例如。您可以使用std::map&lt;int, int&gt; m{{0, 1}}; 构造一个std::map
    【解决方案2】:
    std::vector<std::map<int, int>> v;
    

    表示您正在声明地图矢量!

    push_back 映射成向量,像这样

    v.push_back({std::make_pair(0, 1)}); //Needs C++11
    

    std::map<int, int> map1;
    map1.insert(std::make_pair(0, 1));
    v.push_back(map1);
    

    push_back'ng pair 显然会导致编译错误。

    【讨论】:

      【解决方案3】:

      您可以将地图推送到您的数据结构中,std::vector&lt;std::map&lt;int, int&gt;&gt; v。不是一对,即地图的元素。

      所以,请按照以下方式进行。

      std::map<int,int> t;
      t.insert(std::make_pair(0, 1));
      v.push_back(t);
      

      或者在 C++11 的情况下

      v.push_back({{1,2}});
      

      或者你也可以选择 emplace_back。

      void emplace_work_around(
          std::vector<std::map<int, int>>& v,
          std::initializer_list<std::pair<const int,int>> item
       )
       {
          v.emplace_back(item);
       }
      
      int main()
      {
          std::vector<std::map<int, int>> v;
      
          emplace_work_around(v,{{1,2}});
      }
      

      【讨论】:

        猜你喜欢
        • 2023-04-06
        • 1970-01-01
        • 1970-01-01
        • 2013-03-28
        • 1970-01-01
        • 2021-06-23
        • 2020-11-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多