c++ - 使用 Structs 作为映射中的键,忽略 == 运算符,误报

标签 c++ struct stdmap

<分区>


关闭 3 年前

我正在尝试将结构用作映射中的键,但尽管定义了 <==运营商我收到误报:

return models[mr];即使新的 ImportSettings 也正在返回有reverse = true模型中的那个有`reverse = false。

Visual Studio 调试器还显示运算符调用了 ==甚至没有被调用。我在这里误解了什么?

struct HE2_ImportSettings
{
    bool reverseWindingOrder = false;

    bool operator==(const HE2_ImportSettings& other)const
    {
        return reverseWindingOrder == other.reverseWindingOrder;
    }
};

struct ModelReference
{
    std::string filepath = "";
    HE2_ImportSettings importSettings = {};

    bool ModelReference::operator == (const ModelReference& other) const
    {
        return filepath == other.filepath && importSettings == other.importSettings;
    }
    bool ModelReference::operator< (const ModelReference& other) const
    {
        return filepath < other.filepath;
    }
};



ModelReference mr = { filename, importSettings };

bool exists = models.count(mr);
if (exists)
{
    //This is returning even when the new importsettings has reverse = true and the one in models has reverse = false
    return models[mr];
}

最佳答案

std::map使用等效的概念。

时两个元素是等价的
!(a < b) && !(b < a)

换句话说, map 从不使用 ==查看两个元素是否相同。在你的 map 中,当两个元素具有相同的 filepath 时,它们被认为是等价的。 .如果你也想带importSettings考虑到 map 中的顺序,您还需要比较 operator< 中的顺序.

关于c++ - 使用 Structs 作为映射中的键,忽略 == 运算符,误报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59613045/

上一篇:c++ - 为什么我的程序出错(文件处理)?

下一篇:c++ - C++ 中的对象实例化类型

相关文章:

c++ - Direct2D C++ 用户输入

c++ - 耦合 - C++ web 或 GUI 桌面应用程序

c++ - 我应该传递什么来抛出?

一次复制 8 个字节的结构

c++ - 取消引用刚刚插入的 std::map 值有时会导致访问冲突

c++ - 使用 opengl 的立方体侧纹理

struct - 读/写结构到闪存

c - 使用函数操作 C 中的结构

c++ - 使用 std map 进行比较的运行时错误

C++:如何制作由std::function索引的容器?