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
相关产品推荐
相关产品推荐

