Kai*_*elm 5 c++ iterator std range multimap
我正在使用C++ std::multimap
,我必须循环两个不同的键.有没有一种有效的方法来做到这一点,除了创建两个范围并单独循环这些范围?
这就是我现在这样做的方式:
std::pair<std::multimap<String, Object*>::iterator,std::multimap<String, Object*>::iterator> range;
std::pair<std::multimap<String, Object*>::iterator,std::multimap<String, Object*>::iterator> range2;
// get the range of String key
range = multimap.equal_range(key1);
range2 = multimap.equal_range(key2);
for (std::multimap<String, Object*>::iterator it = range.first; it != range.second; ++it)
{
...
}
for (std::multimap<String, Object*>::iterator it2 = range2.first; it2 != range2.second; ++it2)
{
...
}
Run Code Online (Sandbox Code Playgroud)
您开始使用的代码是最简单的。
如果您确实想在同一循环中迭代两个范围,则可以创建一个自定义迭代器,它接受两个迭代器范围,迭代第一个范围,直到完成,然后切换到第二个范围。这可能比它的价值更麻烦,因为您需要自己实现所有迭代器成员。
编辑:我想太多了;只需将两个循环修改为一个循环就很容易了。
for (std::multimap<String, Object*>::iterator it = range.first; it != range2.second; ++it)
{
if (it == range.second)
{
it = range2.first;
if (it == range2.second)
break;
}
...
}
Run Code Online (Sandbox Code Playgroud)