首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >CoderPad C++ Hashmap在求职面试中没有工作。你能解释一下为什么吗?

CoderPad C++ Hashmap在求职面试中没有工作。你能解释一下为什么吗?
EN

Stack Overflow用户
提问于 2022-11-04 14:08:18
回答 2查看 87关注 0票数 0

所以两天前我进行了一次面试,他们用coderPad.io进行面试,这在求职面试中很常见。事实上,我还有另一个使用coderPad的面试,所以我真的需要问这个问题。

从本质上讲,我的算法写得很正确。我的面试官告诉我的。然而,哈希图不起作用,我们开始调试,直到面试官累了,在那里结束了面试。一天后,我收到了一封拒绝信。然而,面试官确实把它缩小到了散列图上的插入函数。我们尝试了不同的插入方式,但现在仍然有效。

我必须编写一个算法,它需要我为向量中的每个整数元素找到频率。但是,当我打印散列映射的内容时,每个元素的频率总是1,而不是每个元素的频率1。这使我不得不继续进行面试。刚才我在coderPad上重新创建了算法,现在也出现了同样的问题。以下是代码:

代码语言:javascript
运行
复制
#include <iostream>
#include <unordered_map>
#include <vector>

using namespace std;

// To execute C++, please define "int main()"


class hashMapTester {

  public:


  hashMapTester() {

  }

  unordered_map<int, int> collectMap(vector<int>& arr) {

    unordered_map<int, int> map;

    for (long unsigned int i = 0; i < arr.size(); i++) {

        if (map.find(arr[i]) != map.end()) {

          auto freq = map.find(arr[i])->second;

          freq++;

          map.insert(pair<int, int> (arr[i], freq));

        } else {

          map.insert(pair<int, int>(arr[i], 1));

        }


      
    }

    return map;

  }

  void printMap(unordered_map<int, int> map, vector<int>& arr) {

    for (const auto& iter : map) {

      cout << iter.second << endl;

    }

  }


};

int main() {
  
  vector<int> arr = {1, 2, 2, 3 , 4 , 4, 4};

  hashMapTester hM;

  unordered_map<int, int> map = hM.collectMap(arr);

  hM.printMap(map, arr);
  
  return 0;
}

为什么地图的频率部分总是输出1,而它不应该输出1?我被困在这件事上,我真的需要明白为什么。当我在LeetCode或其他编译器上使用此算法时,它可以工作,但不适用于CoderPad。有人能帮帮我吗?要让它在CoderPad上工作,我需要做些什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-11-04 14:20:53

按照地图/插入insert方法“将元素插入到容器中,如果容器尚未包含具有等效键的元素”。

下一节中对insert的调用实际上不会更改unordered_map的内容。

代码语言:javascript
运行
复制
if (map.find(arr[i]) != map.end()) {
    auto freq = map.find(arr[i])->second;
    freq++;
    map.insert(pair<int, int> (arr[i], freq)); // <<-- here
}

选项1:使freq成为引用

代码语言:javascript
运行
复制
if (map.find(arr[i]) != map.end()) {
    auto& freq = map.find(arr[i])->second;
    freq++;
}

选项2:简化算法,

代码语言:javascript
运行
复制
unordered_map<int, int> collectMap(const vector<int>& arr) {
     unordered_map<int, int> map;
     for (int val : arr) {
         ++map[val];
     }
     return map;
}
票数 1
EN

Stack Overflow用户

发布于 2022-11-04 14:17:18

引用优先选择

将元素插入到容器中,如果容器尚未包含具有等效键的元素,则为

您可能应该使用operator[]代替。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74318341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档