在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++20
的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 << ' ';
}
}
输出:
a b c e d
。请注意,我用
std::wstring
替换了std::string
,但这在演示中没有任何实际的区别。
关于c++ - C++:在一个循环中遍历列表和unordered_map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61925502/