0

我想将包含类实例的地图推送到向量。使用以下代码

#include <iostream>
#include <string>
#include <map>
#include <vector>

class Obj {
 public:
  Obj() {}
  Obj(std::string type) : type(type) {}
  std::string type;
  std::string value;
};

int main (int argc, char ** argv)
{
 std::vector< std::map<std::string, Obj> > v;
 v.push_back(std::make_pair("test", Obj("testtype")));

 return 0;
}

有人可以向我解释为什么push_back失败了吗?我可以给你抛出的错误,但我认为对于这种情况来说它们太过分了。

4

4 回答 4

2

问题在这里:

 std::make_pair("test", Obj("testtype");

根据std::mak_pair 文档

std::make_pair
创建一个 std::pair 对象,从参数类型推导出目标类型。

v期望您将一个std::map对象推入其中,但您正在推一个std::pair. std::mapstd::pair是两个不同的东西。

你可以试试:

 std::map<std::string, Obj> mymap;
 mymap["test"] = Obj("testtype");
 v.push_back(mymap);
于 2013-05-28T13:12:37.517 回答
1

这能行吗?

int main (int argc, char ** argv)
{
 std::vector< std::map<std::string, Obj> > v;
 std::map<std::string, Obj> m;

 m["test"] = Obj("testtype");

 v.push_back(m);

 return 0;
}
于 2013-05-28T13:12:06.623 回答
1

你可以试试这样的

std::vector<std::map<std::string, Obj>> v;
std::map<std::string,Obj> v_map;
v_map.insert(std::pair(std::string("test"),Obj("testtype")));
v.push_back(v_map);
于 2013-05-28T13:13:40.183 回答
1

std::vector< std::map<std::string, Obj> > v;应该 :

std::vector< std::pair<std::string, Obj> > v;

std::pair并且std::map是不同的

于 2013-05-28T13:16:13.423 回答