15

multimap次のようにC++でを設定したいと思います。

multimap<pair<string, string>, vector<double> > mmList;

しかし、どうすればそれにデータを挿入できますか?次のコードを試しましたが、コンパイルされません。

mmList.insert(pair<string, string>, vector<double>("a", "b", test));
4

3 に答える 3

20

を使用してペアを作成できます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));
于 2013-01-26T15:25:49.377 に答える
5

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れた引数から直接作成されます。

Ideoneのコード

于 2019-10-24T14:45:38.997 に答える
2

次に例を示します。

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);

読みやすくするために、数行を分割しただけです。ペアの作り方がわかります。ペアは、マルチマップと同じテンプレート化形式である必要があります。

于 2016-11-14T18:57:15.500 に答える