直接将std :: map插入std :: vector

时间:2018-12-05 12:29:31

标签: c++ c++11 vector stdvector stdmap

很抱歉,这个问题很琐碎。

我有地图矢量:

typedef map<char, int> edges;
typedef vector<edges> nodes;

nodes n;

现在让我们说我想推动玩具的发展。我尝试了不同的事情,我的工作是

edges e;        //declare an edge
e['c'] = 1;     //initialize it
n.push_back(e);  //push it to the vector

我如何只需要推入一对边的值('c'和2),而不必声明变量并对其进行初始化?

类似的东西:

n.push_back(edges('c',2));

但是编译器给出了错误

error: no matching function for call to ‘std::map<char, int>::map(char, int)’

3 个答案:

答案 0 :(得分:4)

您可以列出初始化:

nodes vec {
    { {'a', 12}, {'b', 32} },
    { {'c', 77} },
};

vec.push_back(
        { {'d', 88}, {'e', 99} }
        );

答案 1 :(得分:3)

使用扩展的初始化程序列表,如下所示:

n.push_back({ {'c', 2} });

Live demo

需要C ++ 11或更高版本。

答案 2 :(得分:0)

在解决方案中,将map添加到vector而不是对。方法应遍历每个元素以将其放入向量中。因此,您可以使用n[0]['c']等访问元素。

我想,使用for_each和带有传递矢量引用的lambda表达式来创建单行解决方案,以将对添加到矢量中。

#include <algorithm> 

typedef map<char, int> edges;
//change this to take pair
typedef vector<pair<char, int>> nodes;

nodes n;
edges e;        //declare an edge

//map elements are pairs
for_each(e.begin(), e.end(), [&n](pair<char, int> p) { n.push_back(p); });

我希望这能为您解决一个问题。