std::unordered_map::find和count以key为参数无法编译

std::unordered_map::find and count with key as argument fail to compile

本文关键字:key 参数 编译 count unordered map find std      更新时间:2023-10-16

我在为项目编译一些代码时遇到了一些神秘的错误。我使用std::unordered_map在游戏中存储世界的各个部分,这样多个人就可以在同一个区域玩而不会混淆服务器。在world_manager.hpp中,我有一个密钥结构:

    struct chunk_key {
          int32_t cX, cZ;
          uint8_t dimension;
     };
     

还有一张无序的地图:

 
    std::unordered_map<chunk_key, class chunk*, chunk_key_hasher> chunk_buffer; 
    

在world_manager.cpp中,我有一个名为"chunk_is_loaded"的函数来测试映射中是否已经存在块。这就是错误的开始。

    bool    chunk_is_loaded(chunk_key* key)
    {
        if(chunk_buffer.count(key) != 0)
        {
            return true;
        }
        else 
        {
            return false;
        }
    }
    

错误位于"chunk_buffer.count(key(",其中GCC给出以下错误:

world_manager.cpp:在函数'bool
world::chunk_is_loaded(world::chunk_key*('中:
world_manager.cpp:8:34:错误:没有匹配函数可用于调用
"std::unordereded_map world::chunk_key_hasher>::count(world::chunk_key*&(">
if(chunk_buffer.count(key(!=0(
^
world_manager.cpp:8:34:注意:候选为:
在/usr/include/c++/4.8/undered_map:48:0中包含的文件中,
来自world_manager.hpp:7,
来自world_manager.cpp:1:
/usr/include/c++/4.8/bits/undered_map.h:560:7:注意:
std::unordered_map&lt_键,_Tp,_Hash,_Pred,_Alloc>::size_type
std::unordered_map&lt_键,_Tp,_Hash,_Pred,_Alloc>::count c>::key_type=world::chunk_key]
count(const key_type&__x(const
^
/usr/include/c++/4.8/bits/undered_map.h:560:7:注意:参数1从'world::chunk_key*'到'const-key_type&{aka const world::chunk_key&}'

我不理解这个错误,当我按值传递密钥时,它会给我更长的错误字符串,甚至更神秘。感谢您的帮助。

std::unordered_map<chunk_key, class chunk*, chunk_key_hasher> chunk_buffer

映射的键的类型是"chunk_key",而不是"chuck_key*"。

我想您的意图不是将chunk_key存储为对象,而是将其存储为指针。

如果是,请更新地图声明。您还必须确保chunk_key_hasher((理解chunk_key*。

否则,你应该做

if(chunk_buffer.count(*key) != 0)  // dereference key

但是,与不考虑c++11的情况下在映射中存储指针相比,这无疑效率较低。