(以ummap为例)据cppreference说,find()
的返回:“若容器中有数个拥有所请求的键的元素,则可能返回任意一个。”
但是我在用这个代码测试时,使用find()
遍历和使用equal_range()
遍历的范围都一样:
#include <bits/stdc++.h>
#define dbug_show_space(x) cout<<#x<<" = "<<x<<" ";
#define dbug_show(x,end) cout<<#x<<" = "<<x<<end;
#define dbug_show_decide(t1,t2,to,...) to
#define show(...) dbug_show_decide(__VA_ARGS__,dbug_show,dbug_show_space,...)(__VA_ARGS__)
using namespace std;
unordered_multimap<int,int> mp;
pair<unordered_multimap<int,int>::iterator,unordered_multimap<int,int>::iterator> er;
int main()
{
srand(time(0));
for (int i = 1; i <= 100; i++)
{
mp.insert({rand()%10,rand()});
}
er = mp.equal_range(2);
for (auto b = er.first; b != er.second; ++b)
{
show(b->first) show(b->second,"\n");
}
puts("---------------------------------------");
for (auto b = mp.find(2); b != mp.end() && b->first == 2; ++b)
{
show(b->first) show(b->second,"\n");
}
return 0;
}
在本机(dev-C++)和洛谷IDE测试多次,结果中的first
既不会出现别的,也不会漏掉。
这是不是意味着,find()
实际上返回的是对应元素或键的第一个迭代器?