繁体   English   中英

C++:在一个循环中迭代列表和 unordered_map

[英]C++: iterating over a list and an unordered_map in one loop

在 c++ 中,我有一个 wstrings 列表和一个无序 wstring/wstring map。

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

我需要在两个列表上运行一个循环,我不想重复循环代码(在无序的 map 中,我只关心第一个 wstrings,而不关心第二个 wstrings)。 是否有一个迭代器构造可以让我在一个循环中迭代这两种类型? 如果我尝试这样做,我会在 auto* n 上得到“无法推断自动类型”:

for (auto* n : { &m_L, &m_UM }) {
    for (auto& it : *n) {
        ...

使用C++20ranges (或使用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: ab c ed


请注意,我用std::string替换了std::wstring ,但这对演示没有任何实际影响。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM