c++ - C++:在一个循环中遍历列表和unordered_map

标签 c++ list iterator unordered-map

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

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

我需要在两个列表上都运行一个循环,并且我不想重复循环代码(在无序映射中,我只关心第一个wstring,而不关心第二个wstring)。是否有一个迭代器构造可让我在一个循环中对这两种类型进行迭代?如果我尝试这样做,则会在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 << ' ';
    }
}

输出:a b c e d

请注意,我用std::wstring替换了std::string,但这在演示中没有任何实际的区别。

关于c++ - C++:在一个循环中遍历列表和unordered_map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61925502/

相关文章:

c++ - 带有跳跃列表的双向链表以排序方式插入

即使在使用函数之前没有函数声明,C++ 程序也能正常工作

c++ - 寻找最低值(value)。功能。错误 : Thread 1: EXC_BAD_ACCESS (Code =1, 地址 = 0x7fff5fc89000)

javascript - 为克隆输入提供输入 'name' 属性,该属性位于列表内

android - 如何使用 Proto DataStore 保存对象列表

c++ - 使用 vector 时是无符号整数还是迭代器?

java - 单个对象的自定义迭代器

c++ - 随机访问迭代器 : What am I missing?

C++ 如何获得 sizeof(enum) == sizeof(char)?

c++ - 是否可以在模板类内部使用类堆栈元素的 vector ?