#c #c 11
#c #c 11
Вопрос:
Я новичок в использовании хэш-таблиц (AFAIK unordered_multimap — это хэш-таблица), и я пытаюсь вставить в нее структуру с помощью функции. Мой код:
Nod.h
#pragma once
#include <iostream>
#include <unordered_map>
struct nod {
int stare[100], pathManhattan, depth;
nod* nodParinte;
char actiune;
nod();
void Citire(int n);
void Init(std::unordered_multimap<int, nod*> hashTable);
};
Nod.cpp
#include "Nod.h"
#include <unordered_map>
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(std::unordered_multimap<int, nod*> hashTable)
{
hashTable.insert({ pathManhattan depth, this });
hashTable.empty() ? std::cout << "da" : std::cout << "nu";
}
Consoleapplication.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()
{
nod nodInitial; int n, t[1000];
nodInitial.Init(theExplored);
theExplored.empty() ? std::cout << "da" : std::cout << "nu";
return 0;
}
Эта строка из Init
hashTable.empty() ? std::cout << "da" : std::cout << "nu";
возвращает значение false
в то время как эта строка из Consoleapplication.cpp возвращает значение true
theExplored.empty() ? std::cout << "da" : std::cout << "nu";
и я не понимаю, почему.
Кто-нибудь может мне это объяснить?
Я хотел создать функцию внутри структуры, которая вставляла бы определенную переменную типа nod в исследуемую хэш-таблицу с int в качестве ключа, но я не знаю, как это сделать — я думал, что это может быть подходящим подходом, но, похоже, это не так.
Комментарии:
1. Вы не передаете explored по ссылке.
Ответ №1:
void nod::Init(std::unordered_multimap<int, nod*> hashTable)
Это принимает его параметр по значению. Это означает, что он создает копию и изменяет только эту локальную копию. Исходная карта остается неизменной. Вместо этого передайте по ссылке:
void nod::Init(std::unordered_multimap<int, nod*> amp;hashTable)
// ~^~