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;
}