c ++为几个无序映射运行循环

Posted

技术标签:

【中文标题】c ++为几个无序映射运行循环【英文标题】:c++ run a loop for several unordered maps 【发布时间】:2020-05-19 22:53:23 【问题描述】:

我是一名 C# 编码员,但我需要修复旧 C++ 代码中的一些问题。我有 3 个无序的地图,以及需要在每个地图上运行的 for 循环。显然,我不想重复循环代码 3 次。在 c++ 中,我如何为每个映射分配引用,一个一个,然后运行循环(以便对映射的更改持续存在)?

std::unordered_map<std::wstring, std::int8_t> m_A;
std::unordered_map<std::wstring, std::int8_t> m_B;
std::unordered_map<std::wstring, std::int8_t> m_C;
// run over the 3 maps, one by one
// assign the map here
for (int=0; i<[relevant_map].size(); i++) 
    for (auto it = [relevant_map].cbegin(); it != [relevant_map].cend(); ++it) 
        ...

【问题讨论】:

【参考方案1】:

你可以这样做:

for (auto* m : &m_A, &m_B, &m_C) 
    for (/*const*/ auto& p : *m) 
        // ...
    

【讨论】:

【参考方案2】:

您可以在std::vector 中放置指向它们每个的指针,然后遍历每个条目。

std::vector<std::unordered_map<std::wstring, std::int8_t>*> all_maps;
all_maps.push_back(&m_A);
all_maps.push_back(&m_B);
all_maps.push_back(&m_C);

for (auto const& current_map : all_maps) 
// Your loops. current_map is a pointer to the current map.

【讨论】:

以上是关于c ++为几个无序映射运行循环的主要内容,如果未能解决你的问题,请参考以下文章

C语言如何将一个字符串按照规定长度分解为几个字符串

如何将变量放入字符串中?

c语言 关于位域的使用

如何将循环中的信息存储到数组中

c语言 while (a-- > 0) 执行顺序

Java虚拟机内存模型