multimap
次のようにC++でを設定したいと思います。
multimap<pair<string, string>, vector<double> > mmList;
しかし、どうすればそれにデータを挿入できますか?次のコードを試しましたが、コンパイルされません。
mmList.insert(pair<string, string>, vector<double>("a", "b", test));
multimap
次のようにC++でを設定したいと思います。
multimap<pair<string, string>, vector<double> > mmList;
しかし、どうすればそれにデータを挿入できますか?次のコードを試しましたが、コンパイルされません。
mmList.insert(pair<string, string>, vector<double>("a", "b", test));
を使用してペアを作成できますstd::make_pair(a, b)
。通常、ペアをマップ/マルチマップに挿入できます。あなたの場合、文字列のペアとベクトルで構成されるペアを作成する必要があります。
std::multimap<std::pair<std::string, std::string>, std::vector<double> > mmList;
std::vector<double> vec;
mmList.insert(std::make_pair(std::make_pair("a","b"), vec));
C ++ 11以降、 harpunの答えと比較してstd::multimap::emplace()
1つを取り除くために使用できます:std::make_pair()
std::multimap<std::pair<std::string, std::string>, std::vector<double>> mmList;
std::vector<double> test = { 1.1, 2.2, 3.3 };
mmList.emplace(std::make_pair("a", "b"), test);
上記のコードは、コンストラクターの不要な呼び出しの数を減らすため、短いだけでなく、より効率的std::pair
です。効率をさらに高めるために、ユースケース用に特別に導入されたのpiecewise_construct
コンストラクターを使用できます。std::pair
mmList.emplace(std::piecewise_construct,
std::forward_as_tuple("a", "b"),
std::forward_as_tuple(test));
このコードは短くなりませんが、不要なコンストラクターが呼び出されないという効果があります。オブジェクトは、指定さstd::multimap
れた引数から直接作成されます。
次に例を示します。
std::multimap<std::string,std::string> Uri_SessionId_Map;
std::string uri = "http";
std::string sessId = "1001";
std::pair<std::string,std::string> myPair(uri,sessId);
Uri_SessionId_Map.insert(myPair);
読みやすくするために、数行を分割しただけです。ペアの作り方がわかります。ペアは、マルチマップと同じテンプレート化形式である必要があります。