查找multimap中具有给定键的所有值



我正在使用下面的代码搜索multimap中特定键的所有对。

int main() {
multimap<int,int> mp;
mp.insert({1,2});
mp.insert({11,22});
mp.insert({12,42});
mp.insert({1,2});
mp.insert({1,2});
for (auto itr = mp.find(1); itr != mp.end(); itr++)
cout << itr->first<< 't' << itr->second << 'n';
}

您在代码中只调用了一次find。这个调用返回与mp.begin()相同的值是完全可以接受的,这导致您在到达mp.end()之前遍历映射中的所有条目。

您可以使用equal_range成员函数来获取键为1的元素的开始和结束的迭代器:

for (auto[itr, rangeEnd] = mp.equal_range(1); itr != rangeEnd; ++itr)
{
std::cout << itr->first<< 't' << itr->second << 'n';
}

就像其他人指出的那样,你的代码循环了所有元素,从第一个迭代器(find(1)返回第一个迭代器)到最后一个。

如果你愿意,你可以使用c++ 20 ranges (#include <ranges>)

//DATA
std::multimap<int, int> mp;    
mp.insert({ 1,2 });
mp.insert({ 11,22 });
mp.insert({ 12,42 });
mp.insert({ 1,3 });
mp.insert({ 1,4 });
//FILTER THE ELEMENTS
auto foundElements = mp | std::views::filter([](auto& v) {
return v.first == 1;
});
//PRINT
for (auto m : foundElements)
{
std::cout << m.first << " " << m.second << std::endl;
}

最新更新