如何向std::map中插入元素?

33

有没有标准迭代器可以使用std算法(例如std::copy)将元素插入到std :: map中?

我需要一个容器来将一个对象链接到一个字符串,我考虑使用std :: map。是否有更好的容器?忘了说 - 项目需要排序。

3个回答

43
我想OP所需要的是std::inserter(mymap, mymap.end()),因此你可以这样做:
std::copy( inp.begin(), inp.end(), std::inserter(mymap, mymap.end()) );

输入类型必须是你的映射表所接受的一对类型,否则你的算法需要使用函数/函数对象进行std::transform,将输入类型转换为这样的std::pair

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


4
如果输入范围已排序,则使用.begin()作为第二个参数应该会使速度更快。否则,这并不重要。例如,请参阅http://www.sgi.com/tech/stl/insert_iterator.html。 - Karl Knechtel

14
为了向 std::map 插入数据,你需要使用 std::make_pair() 函数。
例如:
std::map<int,std::string> Map;
Map.insert(std::make_pair(5,"Hello"));

尝试类似的东西。:)


4
他不是要求如何将项目插入到映射中,他正在寻找一种使用STL算法将元素插入到映射中的方法。 - CadentOrange
在这个问题被提出和回答的时候,我对声望点数有些着迷,实际上怀疑了一下 Prasoon,他成功地为像这样的答案获得了13个赞。 - CashCow
1
不是回答问题的方式:“我能用一个标准迭代器吗……?” - dmitri

5
是的,如果你使用std::insert_iterator作为OutputIterator(使用辅助函数std::inserter创建这些),则std::copy可以将多个元素插入到映射中。std::map的“元素”是键值对,您可以使用std::make_pair创建它们,就像Prasoon所示。 (实际类型是std::pair<Key, Value>;同样,辅助函数允许进行模板类型推断。)如果您有一个序列中的键和另一个序列中的值,则应该能够使用std::transform生成一系列键值对。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接