【发布时间】:2015-10-19 05:05:27
【问题描述】:
如何将std::map 元素推回std::vector?
std::vector<std::map<int, int>> v;
// Error
v.push_back(std::make_pair(0, 1))
是什么导致了这个错误?
【问题讨论】:
标签: c++ dictionary vector
如何将std::map 元素推回std::vector?
std::vector<std::map<int, int>> v;
// Error
v.push_back(std::make_pair(0, 1))
是什么导致了这个错误?
【问题讨论】:
标签: c++ dictionary vector
使用
v.push_back(std::make_pair(0, 1))
是一个问题,因为 std::pair 无法转换为 std::map。您可以使用我能想到的以下方法之一来解决问题。
方法一
如果你可以使用 C++11 编译器,
v.push_back({{0, 1}});
方法二
std::map<int, int> m;
m.insert(std::make_pair(0, 1));
v.push_back(m);
方法3
std::map<int, int> m;
v.push_back(m);
v.back().insert(std::make_pair(0, 1));
【讨论】:
{{ }} 是做什么的?
initialization_list构造一个std::map。例如。您可以使用std::map<int, int> m{{0, 1}}; 构造一个std::map。
std::vector<std::map<int, int>> v;
表示您正在声明地图矢量!
push_back 映射成向量,像这样
v.push_back({std::make_pair(0, 1)}); //Needs C++11
或
std::map<int, int> map1;
map1.insert(std::make_pair(0, 1));
v.push_back(map1);
push_back'ng pair 显然会导致编译错误。
【讨论】:
您可以将地图推送到您的数据结构中,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}});
}
【讨论】: