You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用std::transform将std::vector转换为索引为键的std::map

解决方案

方法一:使用std::transform结合插入迭代器

通过std::transform遍历vector元素,手动维护索引变量,将索引与元素组成键值对插入map:

#include <vector>
#include <map>
#include <algorithm>
#include <iterator>
#include <iostream>

int main() {
    std::vector<std::string> vec { "abc", "xyz", "pqr" };
    std::map<int, std::string> m;

    int index = 0;
    std::transform(vec.begin(), vec.end(), std::inserter(m, m.end()),
        [&index](const std::string& s) {
            return std::make_pair(index++, s);
        });

    // 输出验证
    for (const auto& pair : m) {
        std::cout << pair.first << " -> \"" << pair.second << "\"\n";
    }
    return 0;
}

方法二:C++20 范围版std::transform(更简洁)

利用C++20范围库的std::views::enumerate直接获取元素索引,无需手动维护计数器:

#include <vector>
#include <map>
#include <algorithm>
#include <ranges>
#include <iterator>
#include <iostream>

int main() {
    std::vector<std::string> vec { "abc", "xyz", "pqr" };
    std::map<int, std::string> m;

    std::ranges::transform(vec | std::views::enumerate,
        std::inserter(m, m.end()),
        [](const auto& elem) {
            return std::make_pair(static_cast<int>(elem.index), elem.value);
        });

    // 输出验证
    for (const auto& pair : m) {
        std::cout << pair.first << " -> \"" << pair.second << "\"\n";
    }
    return 0;
}

方法三:手动迭代(等价替代方案)

如果不需要拘泥于std::transform,手动循环的方式逻辑更直观,兼容所有C++版本:

#include <vector>
#include <map>
#include <iostream>

int main() {
    std::vector<std::string> vec { "abc", "xyz", "pqr" };
    std::map<int, std::string> m;

    for (int i = 0; i < vec.size(); ++i) {
        m[i] = vec[i];
    }

    // 输出验证
    for (const auto& pair : m) {
        std::cout << pair.first << " -> \"" << pair.second << "\"\n";
    }
    return 0;
}

内容的提问来源于stack exchange,提问作者user1408865

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 20:54:54