std :: map.find()用於返回一個map :: iterator到它發現的元素,如果有的話,或者如果沒有,則返回end()。我得到BadPtr回到我身邊。完全相同的構造在代碼的其他部分工作正常。這是什麼?std :: map查找無法正常工作
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);
}
地圖:迭代被包裹製造商的緣故*和 - >分別返回對象OntologyClass和指針:
OntologyClass& operator*() {
return *(itr->second);
}
OntologyClass* operator->() {
return itr->second;
}
是啊,我甚至會建議使用'地圖<字符串,OntologyClass *> :: iterator' – orip 2009-11-28 20:30:31
是的,它會更容易只需返回一個映射迭代器,而不是將迭代器包裝到自己的迭代器類中。 – 2009-11-28 20:33:52
1.你對價值型值得注意的是絕對正確的,謝謝 2.我有地圖<字符串,OntologyClass *>對內搜索OntologyClass對象。我需要一個帶*和 - >運算符的迭代器來返回OntologyClass對象(指針),所以我包裝了標準映射 :: iterator。這就是爲什麼我把它作爲一個成員變量。 –
martinthenext
2009-11-28 20:34:49