std :: multimap获得两个范围

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)

Mar*_*som 3

您开始使用的代码是最简单的。

如果您确实想在同一循环中迭代两个范围,则可以创建一个自定义迭代器,它接受两个迭代器范围,迭代第一个范围,直到完成,然后切换到第二个范围。这可能比它的价值更麻烦,因为您需要自己实现所有迭代器成员。

编辑:我想太多了;只需将两个循环修改为一个循环就很容易了。

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)