Во-первых, здесь задается несколько похожий вопрос: Необычная ошибка выполнения std :: map .
, но поскольку здесь нет реального решения, я бы хотел задать его еще раз,потому что я действительно застрял и ничего не понимаю.
Мой код выглядит следующим образом:
struct MyObj{
//constructor
MyObj(){}
std::map<std::string, std::string> m_fooMap;
bool operator==(const MyObj& other)
{
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;
}
return true;
}
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 == other.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;
}
};
Теперь у меня есть std :: vector anotherObjVec;И мне нужно сравнить элементы внутри этого вектора, друг с другом.для которого я использую оператор ==.
Теперь в случайных случаях каждый раз, даже если входные данные одинаковы, кажется, что во время выполнения возникает ошибка.Ошибка указывает внутри файла «xtree» на следующий код:
_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
}
Я застрял и понятия не имею, что делать дальше.Я даже пытался запустить конструктор так:
MyObj() : m_fooMap(std::map<std::string, std::string>()){}
Использование C ++ 11, Visual Studio 2012 (v110)