如何插入std :: map?

BЈо*_*вић 24 c++ stl

是否有一个std迭代器我可以使用std算法将元素插入到std :: map中(例如std :: copy)?

我需要一个容器来将一个对象链接到一个字符串,我想到了使用std :: map.有更好的容器吗?忘了说 - 需要对物品进行分类.

Cas*_*Cow 31

我认为OP正在寻找的是 std::inserter(mymap, mymap.end())

所以你可以这样做:

std::copy( inp.begin(), inp.end(), std::inserter(mymap, mymap.end()) );
Run Code Online (Sandbox Code Playgroud)

输入类型必须是地图所采用的对类型,否则您的算法需要使用函数/函数进行std :: transform,以将输入类型转换为这样的std :: pair.

inserter实际上不是一个迭代器,而是一个生成迭代器的模板化函数(std :: insert_iterator,它是一个模板化类型,但在函数调用中会自动解析该类型).

  • 如果对输入范围进行排序,则使用`.begin()`作为第二个参数可以使事情变得更快.否则它并不重要.例如,参见http://www.sgi.com/tech/stl/insert_iterator.html. (3认同)

Pra*_*rav 13

为了插入std::map你需要使用std::make_pair().

例如:

std::map<int,std::string> Map;
Map.insert(std::make_pair(5,"Hello"));
Run Code Online (Sandbox Code Playgroud)

尝试类似的东西.:)

  • 这不是他所追求的.他没有问如何将项目插入地图.他正在寻找一种使用STL算法之一将元素插入地图的方法. (4认同)

Kar*_*tel 5

是的,std::copy如果您将a std::insert_iterator用作OutputIterator ,则可以在地图中插入几个元素(使用辅助函数std::inserter创建这些元素;通过这种方式,可以推断出模板类型)。std :: map的“元素”是键值对,您可以使用来创建std::make_pair,如Prasoon所示。(实际类型是std::pair<Key, Value>;再次,辅助函数允许模板类型的推导。)如果您将键放在一个序列中,将值放在另一个序列中,则应该能够std::transform产生一系列键-值对。