是否有一个std迭代器我可以使用std算法将元素插入到std :: map中(例如std :: copy)?
我需要一个容器来将一个对象链接到一个字符串,我想到了使用std :: map。有更好的容器吗?忘了说 - 需要对物品进行分类。
答案 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
来生成一系列键值对。