[英]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++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 << ' ';
}
}
Output: ab c ed
。
请注意,我用std::string
替换了std::wstring
,但这对演示没有任何实际影响。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.