今天重温了一下multimap,突然发现以前对于查找某个元素的所有的mapped_type元素的方式有点笨,可以改进一手,主要有两种方式:
1.使用lower_bound()和upper_bound()找到范围;
2.使用equal_range()范围。
示例代码如下:
#include <iostream>
#include <map>
#include <ctime>
using namespace std;
int main(int argc, char *argv[])
{
srand(time(nullptr));
multimap<int, int> mapInts;
for (int i(0); i<1000; ++i)
{
mapInts.insert({rand() % 100, rand() %100000000});
}
//方法一:使用lower_bound()和upper_bound()的方式
auto begin = mapInts.lower_bound(66);
auto end = mapInts.upper_bound(66);
for (; begin!=end; ++begin)
{
cout << "<" << begin->first << "," << begin->second << ">" << endl;
}
//方法二:使用equal_range()的方式
auto range = mapInts.equal_range(66);
for (; range.first!=range.second; ++range)
{
cout << "<" << range.first->first << "," << range.first->second << ">" << endl;
}
return 0;
}
推荐使用equal_range的方式,因为返回的直接就是表示范围的pair,使用起来极其方便。