代码之家  ›  专栏  ›  技术社区  ›  Wok

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

  •  7
  • Wok  · 技术社区  · 15 年前

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

    因为我想做很多 std::find_if 基于 std::string 元素,我相信 std::map<string,double,MyOwnBinaryPredicate> lower_bound upper_bound 就更合适了。

    insert 中的元素 std::map 插入 更快。

    我相信最简单的方法就是使用 const_reverse_iterator 通过 std::list begin() 标准::地图

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

    3 回复  |  直到 15 年前
        1
  •  11
  •   grddev    15 年前

    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*logn)。然后,您可以像处理其他地图一样直接处理地图。

    sorted_list.assign(map.begin(), map.end());
        2
  •  4
  •   Nordic Mainframe    15 年前

    您可以使用std::copy和std::inserter:

    std::copy(the_list.begin(),the_list.end(),std::inserter(the_map,the_map.begin()));  
    

        3
  •  0
  •   the_drow    15 年前


    事实上,我不明白你想做什么,这意味着它要么会导致无法读取的代码,要么你是远远偏离。
    你为什么这样做?
    你能把代码改成返回地图而不是列表吗?

    推荐文章