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

C++实现vector<map<char,set<int>>>转vector<map<int,set<char>>>方案

容器转换实现思路及代码

核心思路

我们需要将「字符对应int集合」的映射关系反转成「int对应字符集合」的映射,步骤如下:

  • 遍历输入容器v_KeyLocker中的每一个map<char, set<int>>元素
  • 取出每个map内的char键(即TxnId)和它对应的int集合
  • 遍历int集合中的每一个int值,将当前char键插入到临时map中对应int键的set<char>里,C++ map的下标访问会自动处理不存在的键,自动创建空的set<char>
  • 遍历完成后,将临时map的每个键值对单独封装为单键的map<int, set<char>>,依次推入输出容器v_TxnLocker即可匹配示例结构

完整实现代码

void get_txnLocker(vector<map<char, set<int>>> * v_KeyLocker, vector<map<int, set<char>>> * v_TxnLocker) {
    // 清空输出容器避免旧数据干扰
    v_TxnLocker->clear();
    map<int, set<char>> tmp_map;

    // 遍历输入容器所有元素
    for (auto &char_map : *v_KeyLocker) {
        // 取出map内的char键和对应的int集合
        for (auto &char_entry : char_map) {
            char txn_id = char_entry.first;
            set<int> &int_set = char_entry.second;
            // 遍历每个int值更新临时映射
            for (int num : int_set) {
                tmp_map[num].insert(txn_id);
            }
        }
    }

    // 把临时映射的每个键值对转为单键map,推入输出容器
    for (auto &int_entry : tmp_map) {
        map<int, set<char>> single_map;
        single_map.insert(int_entry);
        v_TxnLocker->push_back(single_map);
    }
}

原代码可修复的编译问题

  • get_keylocker函数中定义的set<uint64_t> setK类型不匹配,应该改为set<int> setK
  • main函数中循环变量j未定义,应该改为for (char r ='a'; r <'g'; r++)
  • main函数中调用的getkeys函数名和实际实现的get_keylocker不一致,需要统一

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:18:04