C++ 中的无序映射未按预期运行

问题描述 投票:0回答:1

我试图制作的程序采用大小为 n * n 的 n*n 方阵网格,其值在 [1,n2] 范围内。每个整数只出现一次,除了出现两次的数字“a”和缺失的数字“b”。任务是找到重复和缺失的数字a和b。 它应该返回一个由两个元素组成的向量,{a,b}。

即对于矩阵 {[1,2],[2,3]},它应该返回向量 {2,4}。

在我的程序中,我几乎可以肯定它逻辑上输出“a”和“b”。然而,它总是输出[a,0]。 'b' 始终为 0。 元素“b”永远不应该出现在地图中,因此 find 函数应该确定“b”的值。

 vector<int> findMissingAndRepeatedValues(vector<vector<int>>& grid) { 

    int size = grid.size(); 
    unordered_map<int,int> map; 
    for(int r = 0; r < size; r++) { 
        for(int c = 0; c < size; c++) { 
            map[grid[r][c]]++; 
        } 
    } 
    int a = 0; 
    int b = 0; 
    for(int i = 1; i < size*size + 1; i++) { 
        if(map[i] == 2) { 
            a = i; 
        } 
        else if(map.find(i) == map.end()) { 
            b = i; 
        } 
    } 
    return vector<int> {a,b}; 
} 

正在添加正确创建的地图。我相信这与第二个 for 循环有关。

c++ matrix vector counting unordered-map
1个回答
0
投票

正如评论检查中其他人提到的那样,如果键 i 没有元素,则 if (map[i] == 2) 添加一个元素。您可以按如下方式修改第二个循环 -

for (int i = 1; i < size*size + 1; i++) { if (map.find(i) != map.end()) { if (mp[i] == 2) { a = i; } } else { b = i; } }
    
© www.soinside.com 2019 - 2024. All rights reserved.