【问题标题】:Using unordered_multimap with a struct data type使用带有结构数据类型的 unordered_multimap
【发布时间】:2021-01-09 11:58:57
【问题描述】:

我需要定义一个无序的多重映射,它包含一个 int 类型的键和一个“nod”类型的值。

点头.h

#pragma once
#include <iostream>

struct nod {
    int stare[100], pathManhattan, depth;
    nod* nodParinte;
    char actiune;

    nod();
    void Citire(int n);
    void Init();
};

Nod.cpp

#include "Nod.h"
#include "ConsoleApplication1.cpp"

nod::nod()
{
    pathManhattan = 0;
    depth = 0;
    nodParinte = NULL;
}

void nod::Citire(int n)
{
    for (int i = 0; i < n*n; i++)
    {
        std::cin >> stare[i];
    }
}

void nod::Init()
{
    theExplored.insert({ pathManhattan + depth, this });
}

问题在于初始化函数。我不知道如何使它工作。 ConsoleApplication1.cpp

#include <iostream>
#include <string>
#include <unordered_map>
#include "Nod.h"

std::unordered_multimap<int, nod> theExplored;
std::unordered_multimap<int, nod> theFrontier;

int main()
{
    return 0;
}

在我看来它应该可以工作,因为每个 nod 都会有一个 init 函数插入它在 theExplored 中使用的节点,但我想我可能没有正确理解 unordered_multimap。

我的逻辑有问题吗?如果是这样,我应该如何创建一个哈希表(AFAIK unordered_multimap 基本上是一个哈希表),键为 int 和类型为 nod 的值?

另外,如何在结构中创建一个函数,以便将节点插入到哈希表中?

谢谢。

【问题讨论】:

  • 在 C++ 中,指针和对象是不同的东西。您查看错误消息了吗?
  • this 不是nod,而是nod *
  • @MarcGlisse 是的。我试过用“nod”代替“this”,但还是不行。
  • 为什么你是 #include .cpp 文件?你应该只是 #include .h files
  • @Galik 这就是我认为我能够从 consoleapplication1.cpp 访问 Frontier 的方式。还有其他方法吗?

标签: c++


【解决方案1】:

我认为您需要为应用程序源ConsoleApplication1.cpp 中的map 定义创建一个头文件。您不能只#include 源代码,因为这将为您提供 maps 的多个定义。

你可以这样做,创建ConsoleApplication1.h

#pragma once
#include <unordered_map>
#include "Nod.h"

extern std::unordered_multimap<int, nod> theExplored;
extern std::unordered_multimap<int, nod> theFrontier;

注意extern 关键字。这意味着代码只是一个声明,实际的映射在程序的其他地方(在外部文件中)定义

当然,您的定义ConsoleApplication1.cpp

现在您可以将#include "ConsoleApplication1.cpp" 更改为#include "ConsoleApplication1.h",这应该可以解决您的结构问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 2012-07-23
    • 1970-01-01
    • 2013-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多