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

如何对比std::vector元素与std::map的键元素并完成值替换

问题根本原因
  • 类型不匹配:你代码中std::vector存储的元素是std::string类型,std::map的键是int类型,C++没有默认支持这两种不同类型的相等比较逻辑,所以str_v[i] == itr->first这行代码无法编译通过。
  • 原有代码还存在多处逻辑错误:
    • 迭代器itr仅在初始化时赋值为numbers.begin(),第一次内层循环执行完后itr就等于numbers.end(),后续遍历vector其他元素时,内层循环根本不会执行
    • 匹配成功后的赋值逻辑错误:numbers[i]中的i是vector的下标,不是你要匹配的map键,无法拿到对应的值
    • 手动遍历整个map做匹配的效率极低,std::map本身提供了O(logn)复杂度的find查找接口,完全不需要暴力遍历
实现方案

你只需要将vector中存储的数字字符串转为int类型,再和map的键做匹配即可,修正后的可运行代码如下:

#include <iostream>
#include <string>
#include <map>
#include <vector>
#include <stdexcept> // 用于处理stoi转换异常

int main()
{
    std::map<int, std::string> numbers;
    numbers.insert(std::pair<int, std::string>(0, "zero"));
    numbers.insert(std::pair<int, std::string>(1, "one"));
    numbers.insert(std::pair<int, std::string>(2, "two"));
    numbers.insert(std::pair<int, std::string>(3, "three"));
    numbers.insert(std::pair<int, std::string>(4, "four"));
    numbers.insert(std::pair<int, std::string>(5, "five"));
    numbers.insert(std::pair<int, std::string>(6, "six"));
    numbers.insert(std::pair<int, std::string>(7, "seven"));
    numbers.insert(std::pair<int, std::string>(8, "eight"));
    numbers.insert(std::pair<int, std::string>(9, "nine"));
    numbers.insert(std::pair<int, std::string>(10, "ten"));

    std::vector<std::string> str_v ={"What", "The", "2", "4", "12"};
    
    // 遍历vector每个元素
    for (auto& elem : str_v) {
        try {
            // 把字符串转为int,解决类型不匹配问题
            int key = std::stoi(elem);
            // 直接在map中查找对应键,不需要遍历
            auto find_it = numbers.find(key);
            if (find_it != numbers.end()) {
                // 找到匹配项,替换为map对应的值
                elem = find_it->second;
            }
        } catch (const std::invalid_argument&) {
            // 字符串不是合法数字,不做处理
        } catch (const std::out_of_range&) {
            // 数字超出int范围,不做处理
        }
        std::cout << "Element of vector: " << elem << std::endl;
    }

    return 0;
}

运行输出结果如下:

Element of vector: What
Element of vector: The
Element of vector: two
Element of vector: four
Element of vector: 12

如果你确实不想做字符串转int的操作,也可以把map的int键转为字符串再比较,但是这种方式需要遍历整个map,执行效率远低于上面的方案,不推荐使用。

内容的提问来源于stack exchange,提问作者Bis Andi Grenzen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 08:45:10