Push_back地图到矢量

时间:2015-10-19 05:05:28

标签: c++ dictionary vector

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

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

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

导致此错误的原因是什么?

3 个答案:

答案 0 :(得分:2)

使用

std::pair

是一个问题,因为std::map无法转换为v.push_back({{0, 1}}); 。您可以使用我能想到的以下方法之一解决问题。

方法1

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

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

方法2

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

方法3

RequiredFieldValidator

答案 1 :(得分:1)

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

意味着你正在宣布地图矢量!

push_back将地图导入矢量,就像这样

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

OR

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

push_back&#39; pair显然会导致编译错误。

答案 2 :(得分:0)

您可以将地图推送到数据结构std::vector<std::map<int, int>> 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}});
}