将 std::map<int, vector> 复制到 std::<int>map<std:string, vector<int>>

copy std::map<int, vector<int>> to std::map<std:string, vector<int>>

本文关键字:gt lt int std map vector string 复制      更新时间:2023-10-16

我们可以用不同类型的键将内容从一个映射复制到另一个映射吗?copy std::map<int, vector<int>> to std::map<std:string, vector<int>>

您不能复制它们。虽然映射是从同一个类模板实例化的,但它们仍然是不相关的类型,很像struct Foo {};struct Bar {};

不过,您可以一个对另一个transform

std::map<int, std::vector<int>> m1;
std::map<std::string, std::vector<int>> m2;
std::transform(m1.begin(), m1.end(), std::inserter(m2, m2.end()),
    [](const std::pair<int, std::vector<int>>& p)
    {
        return std::make_pair(std::to_string(p.first), p.second);
    });

尊敬地从@Ceasars窃取了上次被问到的答案。。。

  1. 创建std::map<std::string, vector<int>>
  2. 遍历旧地图
  3. 将键更改为std::string
  4. 插入到新地图

步骤3可以使用boost::lexical_caststd::to_string(在C++11中(或非标准itoa来完成。

当然,您只需要将int转换为字符串。我建议这样做:

string newKey(itoa(key));

(首先检查是否有效:((