[英]std::map find doesn't work properly
std :: map.find()旨在将map :: iterator返回到找到的某个元素(如果有的话),或者返回end(),如果没有的话。 我得到BadPtr还给我。 完全相同的构造在代码的其他部分也可以正常工作。 这是什么?
class OntologyContainer {
map<string, OntologyClass*> data;
OntologyClass* last_added;
public:
class iterator : public std::iterator<bidirectional_iterator_tag, OntologyClass> {
map<string, OntologyClass*>::iterator itr;
public:
iterator(map<string, OntologyClass*>::iterator it) : itr(it) { }
...
}
iterator begin() {
return iterator(data.begin());
}
iterator end() {
return iterator(data.end());
}
iterator Find(const string & to_find) {
map<string, OntologyClass*>::iterator it = data.find(to_find);
// this is where it fails
return iterator(it);
}
map :: iterator的包装是为了使运算符*和->分别返回OntologyClass对象和指针:
OntologyClass& operator* () {
return *(itr->second);
}
OntologyClass* operator->() {
return itr->second;
}
这可能与您继承自std::iterator<bidirectional_iterator_tag, OntologyClass>
的事实有关,使您的迭代器value_type为OntologyClass
,而不是指向地图迭代器使用的OntologyClass
的指针 。 您如何实现取消引用运算符?
如果可以使用boost,我建议使用boost :: transform_iterator。
这个堆栈溢出的答案有一个很好的例子,说明如何做到: 迭代器适配器仅对映射中的值进行迭代?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.