【问题标题】:insert a std::initializer_list into std::map将 std::initializer_list 插入 std::map
【发布时间】:2014-02-23 02:52:59
【问题描述】:

我有这样的方法:

std::map<std::string, int> container;

void myMap(std::initializer_list<std::pair<std::string, int>> input)
{
    // insert 'input' into map...
}

我可以这样调用那个方法:

myMap({
    {"foo", 1}
});

如何转换我的自定义参数并插入到地图中?

我试过了:

container = input;

container(input);

但是不行,因为map的参数只有std::initializer_list,没有std::pair

谢谢大家。

【问题讨论】:

    标签: c++ c++11 std stdmap


    【解决方案1】:
    container.insert(input.begin(), input.end());
    

    如果你想替换地图的内容。先做container.clear();

    【讨论】:

      【解决方案2】:

      您的问题是 std::map<:string> 的 value_type 不是 std::pair<:string>。它是 std::pair。注意键上的 const。这工作正常:

      std::map<std::string, int> container;
      
      void myMap(std::initializer_list<std::pair<const std::string, int>> input) {
          container = input;
      }
      

      如果不能更改函数的签名,则必须编写循环或使用 std::copy 将每个输入元素转换为容器的 value_type。但我猜你可能可以,因为它被称为 myMap 而不是 otherGuysMap :) .

      【讨论】:

        猜你喜欢
        • 2019-08-19
        • 1970-01-01
        • 2019-05-07
        • 2010-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多