簡體   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