copy std :: map <int,vector <int =“”>&gt;到std :: map <std:string,vector <int =“”>&gt; </std:string,> </int,>

时间:2013-03-07 23:33:51

标签: c++

我们可以将内容一张地图复制到另一张不同类型的地图吗? copy std::map<int, vector<int>> to std::map<std:string, vector<int>>

3 个答案:

答案 0 :(得分:3)

您无法复制它们。虽然地图是从同一个类模板中实例化的,但它们仍然是不相关的类型,非常类似于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);
    });

答案 1 :(得分:1)

恭敬地从@Ceasars中删除了答案the last time this was asked ...

  1. 创建std::map<std::string, vector<int>>
  2. 遍历旧地图
  3. 将密钥更改为std :: string
  4. 插入新地图
  5. 第3步可以使用boost::lexical_caststd::to_string(在C ++ 11中)或非标准itoa完成。

答案 2 :(得分:0)

当然,您只需将int转换为字符串即可。我会建议这样的事情:

string newKey(itoa(key));

(检查一下是否有效:))