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指针,这可能与该事实有关。您如何实现取消引用运算符?

关于c++ - std::map查找无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1813664/

10-16 16:02