请求详细解释代码中map[arr[i]]++语句的作用
详解C++代码中
map[arr[i]]++的执行逻辑 先明确这段代码的功能:它用来找出数组中第一个存在重复的元素的1-based索引——如果某个元素在数组里出现至少两次,就返回它第一次出现的位置;如果所有元素都不重复,返回-1。
下面重点拆解核心语句map[arr[i]]++的执行逻辑:
这里用到的是C++的unordered_map<int, int>(键和值都是int类型的哈希表),结合operator[](方括号)和++操作,执行逻辑分两种情况:
情况1:当前元素arr[i]未在map中出现过
- 当通过
map[arr[i]]访问时,因为哈希表里没有这个键,unordered_map会自动插入一个新的键值对:键为arr[i],值被初始化为int类型的默认值0 - 紧接着执行
++操作,把刚初始化的0改成1,完成该元素的第一次计数
情况2:当前元素arr[i]已在map中存在
map[arr[i]]直接返回该键对应值的引用(也就是之前统计过的出现次数)- 执行
++操作,把这个次数加1,实现出现次数的累加
实际示例
比如数组为[2, 3, 2, 1],第一次循环的执行过程:
- i=0,arr[i]=2:map中无2,插入
{2:0}后++变为{2:1} - i=1,arr[i]=3:map中无3,插入
{3:0}后++变为{3:1} - i=2,arr[i]=2:map中已有2,对应值为1,++变为
{2:2} - i=3,arr[i]=1:map中无1,插入
{1:0}后++变为{1:1}
统计完成后,第二次遍历数组时,第一个遇到对应map值≥2的元素是i=0的2,因此返回0+1=1,符合预期。
内容的提问来源于stack exchange,提问作者anish kumar
相关产品推荐
相关产品推荐

