有没有标准迭代器可以使用std算法(例如std::copy)将元素插入到std :: map中?
我需要一个容器来将一个对象链接到一个字符串,我考虑使用std :: map。是否有更好的容器?忘了说 - 项目需要排序。
std::inserter(mymap, mymap.end())
,因此你可以这样做:std::copy( inp.begin(), inp.end(), std::inserter(mymap, mymap.end()) );
输入类型必须是你的映射表所接受的一对类型,否则你的算法需要使用函数/函数对象进行std::transform
,将输入类型转换为这样的std::pair
。
inserter
实际上不是一个迭代器,而是一个产生迭代器的模板函数(std::insert_iterator
),它是一个模板类型,但该类型在函数调用中会自动解析。
std::map
插入数据,你需要使用 std::make_pair()
函数。std::map<int,std::string> Map;
Map.insert(std::make_pair(5,"Hello"));
尝试类似的东西。:)
std::insert_iterator
作为OutputIterator(使用辅助函数std::inserter
创建这些),则std::copy
可以将多个元素插入到映射中。std::map的“元素”是键值对,您可以使用std::make_pair
创建它们,就像Prasoon所示。 (实际类型是std::pair<Key, Value>
;同样,辅助函数允许进行模板类型推断。)如果您有一个序列中的键和另一个序列中的值,则应该能够使用std::transform
生成一系列键值对。
.begin()
作为第二个参数应该会使速度更快。否则,这并不重要。例如,请参阅http://www.sgi.com/tech/stl/insert_iterator.html。 - Karl Knechtel