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

标签 c++ insert stdmap stdlist std-pair

我有一个 std::list< std::pair<std::string,double> > ,我知道这是根据 std::string element 排序的.

因为我想做很多std::find_if基于 std::string元素,我相信一个std::map<string,double,MyOwnBinaryPredicate>lower_boundupper_bound会更合适。

事实是我想insert std::map 中的元素以一种有效的方式。所以我想使用一个额外的迭代器来制作 insert更快。

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

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

谢谢!

最佳答案

如果您已经有一个排序列表,它是根据谓词 Predicate 排序的,您可以执行以下操作:

std::list< std::pair<std::string, double> > sorted_list;
std::map<string, double, Predicate> map(sorted_list.begin(), sorted_list.end());

如果您的列表已经排序,map 构造函数具有线性时间复杂度,否则为 O(n*log n)。然后,您可以像使用其他任何东西一样直接使用 map 。

如果您稍后想要将结果返回到您的列表中,您可以做相反的事情:

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

关于c++ - 如何将已排序的 std::list of std::pair 转换为 std::map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3412623/

相关文章:

c++ - std::make_map?统一初始化

c++ - 将两个键与 std::map 一起使用的最佳方法是什么?

c++ - 我在哪里可以找到标准中对 *p 和 p[0]、*(p+1) 和 p[1]、... 之间等价关系的引用?

c++ - 删除模板 C++ 中的 const 限定符

c++ - 如何将三个整数组合成一个唯一的标签,使标签在 C++ 中保持整数?

java - 插入二进制堆时出现 NullPointerException?

c++ - 如果 lambda 在运行时被移动/破坏会发生什么?

excel - 插入图片到Excel VBA,方法图片失败

insert - 如何将时间序列数据插入Cassandra

c++ - 二维 vector 和 vector map 有什么区别?