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

如何交换vector中的值?求指定映射交换的实现方案

实现Vector中指定规则的值交换映射

没问题,我来帮你搞定这个vector值的映射交换需求!核心思路很简单:我们要把vector里的每个元素,按照1→3、2→4、3→2、4→1的规则做替换,本质就是一个值到值的映射转换,下面给你几种实用的实现方式,挑你顺手的来就行:


方法1:用数组做映射(最高效,适合值范围小的场景)

因为你的映射值都是1-4的连续整数,用数组做映射是最快的——直接通过原数值当索引取目标值,时间复杂度O(1):

#include <vector>
#include <iostream>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 1, 3};
    // 索引对应原数值,数组值对应替换后的目标值,索引0留空(因为我们的原数值从1开始)
    int mapping[] = {0, 3, 4, 2, 1};
    
    // 遍历vector,逐个替换
    for (int& num : vec) {
        num = mapping[num];
    }
    
    // 测试输出:3 4 2 1 3 2
    for (int num : vec) {
        std::cout << num << " ";
    }
    return 0;
}

这种方法在元素数量多的时候优势特别明显,完全没有哈希查找的开销。


方法2:用哈希表(std::unordered_map)做映射(更灵活,适合值范围大的场景)

如果以后你的映射规则要扩展到非连续的数值,用哈希表会更灵活,可读性也更强:

#include <vector>
#include <unordered_map>
#include <iostream>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 1, 3};
    // 直接把映射规则写进哈希表
    std::unordered_map<int, int> mapping = {
        {1, 3},
        {2, 4},
        {3, 2},
        {4, 1}
    };
    
    for (int& num : vec) {
        num = mapping[num];
    }
    
    // 测试输出:3 4 2 1 3 2
    for (int num : vec) {
        std::cout << num << " ";
    }
    return 0;
}

以后要加新的映射对,直接在哈希表里追加就行,不用改太多代码。


方法3:用switch-case判断(适合规则极简单的场景)

如果你的映射规则就只有这4条,用switch-case也能搞定,不需要额外容器:

#include <vector>
#include <iostream>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 1, 3};
    
    for (int& num : vec) {
        switch(num) {
            case 1: num = 3; break;
            case 2: num = 4; break;
            case 3: num = 2; break;
            case 4: num = 1; break;
            // 如果vector里可能有1-4之外的值,记得加default处理(比如保持原值)
            default: break;
        }
    }
    
    // 测试输出:3 4 2 1 3 2
    for (int num : vec) {
        std::cout << num << " ";
    }
    return 0;
}

小提醒

如果你的vector里可能存在1-4之外的数值,一定要加对应的处理逻辑(比如switch里的default,或者哈希表中判断是否存在键),避免出现未定义行为哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:27:25