C++ 为什么map::find找到了它不应该找到的东西';你不在那里吗?

C++ 为什么map::find找到了它不应该找到的东西';你不在那里吗?,c++,map,find,C++,Map,Find,我已经定义了这些结构 typedef struct SApair { SApair(); SApair(State state, Action action); State state; Action action; bool operator<( const SApair& n) const { return (this->state.m_avgDpsXHealthEnemyGroup < n.st

我已经定义了这些结构

typedef struct SApair
{
    SApair();
    SApair(State state, Action action);

    State state;
    Action action;

    bool operator<( const SApair& n) const
    { 
        return (this->state.m_avgDpsXHealthEnemyGroup < n.state.m_avgDpsXHealthEnemyGroup
                && this->state.m_avgDpsXHealthGroup < n.state.m_avgDpsXHealthGroup
                && this->state.m_distToClosestEnemyGroup < n.state.m_distToClosestEnemyGroup); //TODO - DEFINE A PROPER OPERATOR 
    }


} SApair;

struct State
{
    State();

    Group m_avgDpsXHealthGroup;
    Group m_avgHealthGroup; //LOW, MID, HIGH
    Group m_distToClosestEnemyGroup;
    Group m_avgDpsXHealthEnemyGroup; 
    Group m_avgEnemyHealthGroup;
}
我有一张地图

std::map<SApair, float>* q_map;
我创建了一个新的SApair元素

SApair sapair = SApair(...);
sapair.state = {MID, LOW, HIGH, -1, -1} //This has been summed up by me for this stackoverflow post, but you get the idea
sapair.action = ATTACK;
因此,很明显,sapair与q_图[0]中的不同

然而,查找方法似乎是在q_图中查找sapair

if(q_map->find(sapair) != q_map->end())
{
    //I don't understand why it enters here
}
我错过了什么

是否可能是SApair中定义的<运算符

我当然想不出来

任何帮助都将不胜感激


谢谢。

操作符操作符如果
q\u-map
是指向映射的指针,那么
q\u-map[0]->首先应该做什么?我不知道地图支持
操作员->
访问。。。好。。任何东西我真的那么累吗?你的
我想你的代码甚至不会被编译。。你能给我看一下可以编译和运行的具体代码吗?@WhozCraig我的错误,这实际上不在代码中,是我试图总结这篇文章的内容。我的意思是说地图上只有一个元素,在0的位置,并且具有这个特征。我编辑了我的原始帖子。如果
q_-map
是指向地图的指针,那么
q_-map[0]->首先应该做什么?我不知道地图支持
操作员->
访问。。。好。。任何东西我真的那么累吗?你的
我想你的代码甚至不会被编译。。你能给我看一下可以编译和运行的具体代码吗?@WhozCraig我的错误,这实际上不在代码中,是我试图总结这篇文章的内容。我的意思是说地图上只有一个元素,在0的位置,并且具有这个特征。我编辑了我的原始帖子。这回答了为什么它要输入if子句,好像它在q_地图中找到了sapair一样。谢谢。我仍然不知道如何正确定义操作符。我不一定需要定义一个更少的操作符,但我这样做是因为我阅读它是必要的,因为映射中的元素是有序的。有更好的方法吗?最后,我所希望的就是能够区分两个不同的对象,这样,如果地图上找不到sapair,就可以插入它。@FerranMGoperator@FerranMG:我添加了一个
operator@sth谢谢你的帮助,它帮助了我,并帮助我理解这个问题是什么。“米莎·G·拉尔,这很有趣,但是它似乎只在C++ 11和14中起作用。我目前使用的是旧版本,无法切换到新版本。无论如何,谢谢你的链接。有趣的是,这回答了为什么它要输入if子句,就好像它在q_映射中找到了sapair一样。谢谢。我仍然不知道如何正确定义操作符。我不一定需要定义一个更少的操作符,但我这样做是因为我阅读它是必要的,因为映射中的元素是有序的。有更好的方法吗?最后,我所希望的就是能够区分两个不同的对象,这样,如果地图上找不到sapair,就可以插入它。@FerranMGoperator@FerranMG:我添加了一个
operator@sth谢谢你的帮助,它帮助了我,并帮助我理解这个问题是什么。“米莎·G·拉尔,这很有趣,但是它似乎只在C++ 11和14中起作用。我目前使用的是旧版本,无法切换到新版本。无论如何,谢谢你的链接。很有趣。
SApair sapair = SApair(...);
sapair.state = {MID, LOW, HIGH, -1, -1} //This has been summed up by me for this stackoverflow post, but you get the idea
sapair.action = ATTACK;
if(q_map->find(sapair) != q_map->end())
{
    //I don't understand why it enters here
}
//TODO - DEFINE A PROPER OPERATOR
bool operator<( const SApair& n) const
{ 
    if (this->state.m_avgDpsXHealthEnemyGroup < n.state.m_avgDpsXHealthEnemyGroup)
        return true;
    if (this->state.m_avgDpsXHealthGroup < n.state.m_avgDpsXHealthGroup)
        return true;
    if (this->state.m_distToClosestEnemyGroup < n.state.m_distToClosestEnemyGroup)
        return true;
    return false;
}