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

Insert std::map into std::vector directly

抱歉,如果问题很琐碎。

我有一个地图矢量:

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)’

可以列出初始化:

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

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

使用扩展的初始化列表,像这样:

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

Live demo

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

在您的解决方案中,您将 map 添加到矢量而不是对。方法应该遍历每个元素以将其放入向量中。因此,您可以使用 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); });

我希望这能为您解释一个解决方案。