【问题标题】:How to convert a array enumeration to map efficiently如何有效地将数组枚举转换为映射
【发布时间】:2021-03-13 16:39:42
【问题描述】:


我正在寻找一种根据数组索引枚举将 C++ 数组转换为映射的有效方法。

例如,如果我有一个数组

arr=[2,4,5,3,6]

我想要一张类似的地图

[<0,2>, <1,4>, <2,5>, <3,3>, <4,6>]

我目前的实现是这样的:

std::map<int, int> mapping; 
for (int i = 0; i < len; i++)
    mapping.insert(pair<int, int>(i, arr[i]));

【问题讨论】:

  • 我不会将它作为重复的投票,因为这会单枪匹马地敲响你的问题。但是,这有帮助吗:How do I convert values from a vector to a map in c++? ?
  • 好的-我会关闭它,然后。
  • 这个问题的目标不正确,因为它将向量转换为地图的 keys,所有值都是 1。这个问题不同,所以我我投票重新开放。

标签: c++


【解决方案1】:

使用 range-v3 库,您可以方便地编写此代码,并且非常易读,而且效率也很高:

namespace rs = ranges;
namespace rv = ranges::views;

auto result = input 
            | rv::enumerate 
            | rs::to<std::map<int, int>>;

这是demo

【讨论】:

    【解决方案2】:

    您可以通过提示插入来加快速度。

    std::map<int, int> mapping; 
    for (int i = 0; i < len; i++)
        mapping.emplace_hint(mapping.end(), i, arr[i]);
    

    【讨论】:

      猜你喜欢
      • 2019-07-06
      • 2021-03-10
      • 2013-01-17
      • 1970-01-01
      • 2018-04-23
      • 1970-01-01
      • 2019-03-04
      • 1970-01-01
      • 2018-09-12
      相关资源
      最近更新 更多