std :: map find无法正常工作

时间:2009-11-28 20:15:25

标签: c++ stl iterator std

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是为了使运算符*和 - &gt;而被包装的。分别返回OntologyClass对象和指针:

            OntologyClass& operator* () {
        return *(itr->second);
    }

    OntologyClass* operator->() {
        return itr->second;
    }

2 个答案:

答案 0 :(得分:1)

这可能与您从std::iterator<bidirectional_iterator_tag, OntologyClass>继承的事实有关,使您的迭代器value_type为OntologyClass,而不是指针到{{1} },这是你的地图迭代器使用的。你是如何实现解除引用运算符的?

答案 1 :(得分:0)

如果你可以使用boost我建议使用boost :: transform_iterator。

这个堆栈溢出答案有一个很好的例子,如何做到这一点: iterator adapter to iterate just the values in a map?