Firstly, there is somewhat a similar question asked here: Unusual std::map runtime error
but since there is no real solution there, I would like ask it again, because I am really stuck and clueless.
My code is as follows:
struct MyObj{
//constructor
MyObj(){}
std::map<std::string, std::string> m_fooMap;
bool operator==(const MyObj& other)
{
else if (m_fooMap.size() != other.m_fooMap.size())
return false;
std::map<std::string, std::string>::const_iterator i, j;
i = m_fooMap.cbegin();
j = other.m_fooMap.cbegin();
for (; i != m_fooMap.cend(), j != other.m_fooMap.cend(); ++i, ++j)
{
if(i->first.empty() || j->first.empty())
continue;
if (i->first != j->first)
return false;
if (i->second != j->second)
return false;
}
}
bool operator!=(const MyObj& other)
{
return !operator==(other);
}
};
struct AnotherObj{
std::map<std::string, MyObj> m_collectionOfObjs; //always guaranteed to contain atleast one entry
bool operator==(const AnotherObj &other) const
{
for (auto& objIt : m_collectionOfObjs)
{
auto findSeriesIt = other.m_collectionOfObjs.find(objIt.first);
if (findSeriesIt == m_collectionOfObjs.end())
return false;
//else found, see if the internal content is the same?
else
{
if (objIt.second != findSeriesIt->second)
return false;
}
}
//else
return true;
}
};
now, I have a std::vector anotherObjVec; And I need to compare the items inside this vector, with each other. for which I use the == operator.
Now at random instances everytime, even though the input data is the same, there seems to be a runtime error. The error points inside the "xtree" file, to the following code.
_Nodeptr _Lbound(const key_type& _Keyval) const
{ // find leftmost node not less than _Keyval
_Nodeptr _Pnode = _Root(); //<------------ THIS line is where it points to
_Nodeptr _Wherenode = this->_Myhead; // end() if search fails
while (!this->_Isnil(_Pnode))
if (_DEBUG_LT_PRED(this->_Getcomp(), this->_Key(_Pnode), _Keyval))
_Pnode = this->_Right(_Pnode); // descend right subtree
else
{ // _Pnode not less than _Keyval, remember it
_Wherenode = _Pnode;
_Pnode = this->_Left(_Pnode); // descend left subtree
}
return (_Wherenode); // return best remembered candidate
}
I am stuck and have no idea what to do next. I even tried initiating the constructor like this:
MyObj() : m_fooMap(std::map<std::string, std::string>()){}
Using C++11, Visual Studio 2012(v110)
Aucun commentaire:
Enregistrer un commentaire