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::pairstd::mapstd::pairは 2 つの異なるものです。

あなたは試すことができます:

 std::map<std::string, Obj> mymap;
 mymap["test"] = Obj("testtype");
 v.push_back(mymap);
于 2013-05-28T13:12:37.517 に答える
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

これは機能しますか?

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::vector< std::pair<std::string, Obj> > v;

std::pairstd::mapは異なります

于 2013-05-28T13:16:13.423 に答える