【问题标题】:How can I insert elements into a multimap?如何将元素插入多图?
【发布时间】:2013-01-26 15:16:15
【问题描述】:

我想在 C++ 中设置一个multimap 如下:

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

但是我怎样才能在其中插入数据呢?我尝试了以下代码,但它没有编译:

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

【问题讨论】:

    标签: c++ dictionary insert containers multimap


    【解决方案1】:

    由于C++11harpun's answer 相比,您可以使用std::multimap::emplace() 删除一个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构造函数的不必要调用的次数。 为了进一步提高效率,您可以使用std::pairpiecewise_construct构造函数,它是专门针对您的用例引入的:

    mmList.emplace(std::piecewise_construct,
        std::forward_as_tuple("a", "b"),
        std::forward_as_tuple(test));
    

    这段代码不再更短,但不会调用不必要的构造函数。对象是直接在std::multimap 中根据给定参数创建的。

    Code on Ideone

    【讨论】:

      【解决方案2】:

      您可以使用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));
      

      【讨论】:

        【解决方案3】:

        示例如下:

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

        为了提高可读性,只是拆分了几行。您可以了解如何制作配对。 pair 必须与 multimap 具有相同的模板化形式。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-09-09
          • 2023-04-06
          • 2013-09-23
          • 2017-03-31
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多