C++: 在一个循环中遍历一个列表和一个无序映射。

问题描述 投票:0回答:1

在C++中,我有一个wstrings列表和一个无序的wstringwstring映射。

std::list<std::wstring> m_L;
std::unordered_map<std::wstring, std::wstring> m_UM;

我需要在这两个列表上运行一个循环,而且我不想重复循环代码(在无序映射中,我只关心第一个wstrings,而不是第二个)。有没有一个迭代器结构可以让我在一个循环中遍历这两种类型?如果我尝试这样做,我在auto* n上得到 "无法推导出auto类型"。

for (auto* n : { &m_L, &m_UM }) {
    for (auto& it : *n) {
        ...
c++ list iterator unordered-map
1个回答
3
投票

C++20's ranges (或与 range-v3 库),你可以很简单地做到这一点。

int main() {
    std::list<std::string> l_str = {"a", "b", "c"};
    std::unordered_map<std::string, std::string> m_str = {{"d", "dd"}, {"e", "ee"}};

    using namespace ranges::views; // for concat(), all() and keys()
    for (auto& e : concat(all(l_str), keys(m_str))) {
        std::cout << e << ' ';
    }
}

Output: a b c e d.


请注意,我将 std::wstringstd::string但这应该不会对演示产生任何实际影响。

© www.soinside.com 2019 - 2024. All rights reserved.