如何插入std :: map?

时间:2010-12-07 09:36:59

标签: c++ stl

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

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

3 个答案:

答案 0 :(得分:30)

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

所以你可以这样做:

std::copy( inp.begin(), inp.end(), std::inserter(mymap, mymap.end()) );

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

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

答案 1 :(得分:13)

要插入std::map,您需要使用std::make_pair()

例如:

std::map<int,std::string> Map;
Map.insert(std::make_pair(5,"Hello"));

尝试类似的东西。 :)

答案 2 :(得分:5)

是的,std::copy可以在地图中插入多个元素,如果使用std::insert_iterator作为OutputIterator(使用辅助函数std::inserter来创建这些元素;这样,模板类型可以推断)。正如Prasoon所说,std :: map的“元素”是键值对,你可以使用std::make_pair创建它们。 (实际类型为std::pair<Key, Value>;辅助函数再次允许模板类型推导。)如果一个序列中的键和另一个序列中的值,则应该能够使用std::transform来生成一系列键值对。