很抱歉,这个问题很琐碎。
我有地图矢量:
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)’
答案 0 :(得分:4)
您可以列出初始化:
nodes vec {
{ {'a', 12}, {'b', 32} },
{ {'c', 77} },
};
vec.push_back(
{ {'d', 88}, {'e', 99} }
);
答案 1 :(得分:3)
答案 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); });
我希望这能为您解决一个问题。