当前位置: 首页 > 知识库问答 >
问题:

与map和unordered_map相关的编译错误:"试图引用已删除的函数"

常培
2023-03-14

我想在C STL中使用map来创建vector和int之间的关联。但我在下面的代码中遇到了多个编译错误:

#include <vector>
#include <map>
#include <unordered_map>

using namespace std;

int main(void)
{
    unordered_map<vector<char>, int> mp;
    return 0;
}

在VC中得到了这个编译错误:

错误C2280:'std::哈希

但是,如果我像下面介绍的那样更改代码,那么代码可以正确编译:

#include <vector>
#include <map>
#include <unordered_map>

using namespace std;

int main(void)
{
    map<vector<char>, int> mp;
    return 0;
}

我在StackoverFlow中发现了这个问题,它的标题是:Cunordered_map使用自定义类类型作为键

共有2个答案

慕冠宇
2023-03-14

根据@JohnZwinck(优秀)的回答,我想说,使用std::unordered_map向量作为键通常是个坏主意,因为实现任何类型的有效哈希函数都可能需要很高的成本。

John给出的链接对此进行了扩展,但本质上,每次需要对任何内容进行哈希运算时,哈希函数都必须检查向量中的每个元素。如果向量很大,哎哟!

所以std::map在这里可能是更好的选择,因为std::更少(-

顾乐池
2023-03-14

map要求实现小于比较。这是一个向量。但是unordered_map需要一个哈希函数,您需要自己实现。这没什么大不了的,您可以在这里看到如何使用hash_combine来实现:“std::向量”的快速哈希函数

 类似资料:
  • 我将repo.scala-sbt.org和dl.bintray.com证书添加到Java密钥库中,并将密钥库路径(djavax.net.ssl.truststore)添加到sbt配置中,但这并不能解决问题。有什么解决这个问题的建议吗? --TIA -djavax.net.ssl.trustStore=“\jre\lib\security\cacerts” [error](更新)LMCoursier

  • 的类型应该是什么?Eclipse建议使用,但我试图获得更具体的信息。

  • 下面是有问题的代码: 可在以下链接中找到该类的代码: Grades.java:http://pastebin.com/ahYRS2WD Student.java:http://pastebin.com/EBF4BBCb 班爪哇:http://pastebin.com/A1C9fCL1 我的问题发生在我运行代码并输入了班级名称、班级规模、学生姓名之后,这些都很好,当我输入学生的成绩时,这下一位给我带

  • 问题内容: 我们要输入的值怎么 可能来自不同类型? 问题答案: 问题在于,编译器仅知道键类型为“未知”,但不知道映射键的类型和返回的类型是 相同的 未知类型(即使我们作为人类意识到这是相同的) 。 如果要使其工作,则必须通过 键入 方法来告诉编译器 相同的 未知类型,例如: __

  • 我已经回答了大多数类似的问题,但没有一个能解决我的问题。我的表有四列:id、用户名、标题和日期。我想在用户单击按钮(锚定标记)时删除与特定用户名关联的整行。请问,我如何做到这一点?这是我试过的密码。 php 超文本标记语言 上面的代码重定向了页面,但没有删除任何内容。