关于多重关联容器的迭代器
  • 板块学术版
  • 楼主llamn
  • 当前回复1
  • 已保存回复1
  • 发布时间2025/1/22 21:46
  • 上次更新2025/1/23 09:26:58
查看原帖
关于多重关联容器的迭代器
1038651
llamn楼主2025/1/22 21:46

(以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()实际上返回的是对应元素或键的第一个迭代器?

2025/1/22 21:46
加载中...