c – 如何将std :: pair的已排序std :: list转换为std :: map

前端之家收集整理的这篇文章主要介绍了c – 如何将std :: pair的已排序std :: list转换为std :: map前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个std :: list<的std ::对<的std :: string,双> >,我知道它是根据std :: string元素排序的.

因为我想基于std :: string元素做很多std :: find_if,我相信std :: map< string,double,MyOwnBinaryPredicate>使用lower_bound和upper_bound会更充足.

事实是我想以有效的方式在std :: map中插入元素.所以我想使用额外的迭代器来使插入更快.

我相信最简单的方法是使用const_reverse_iterator来浏览std :: list并使用std :: map的begin().

你会这样做,还是一个坏主意?

谢谢!

解决方法

如果您已经有一个排序列表,它根据谓词Predicate排序,您可以执行以下操作:
std::list< std::pair<std::string,double> > sorted_list;
std::map<string,Predicate> map(sorted_list.begin(),sorted_list.end());

如果列表已经排序,则映射构造函数具有线性时间复杂度,否则为O(n * log n).然后,您可以像处理任何其他地图一样直接使用地图.

如果您以后希望将结果返回到列表中,则可以执行相反的操作:

sorted_list.assign(map.begin(),map.end());

猜你在找的C&C++相关文章