将 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} });
需要 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); });
我希望这能为您解释一个解决方案。
抱歉,如果问题很琐碎。
我有一个地图矢量:
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} });
需要 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); });
我希望这能为您解释一个解决方案。