unordered_multimap.empty() возвращает true, хотя я думаю, что он должен был вернуть false?

#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)
//                                               ~^~