类(C ++)中泛型查找函数的冲突返回值,返回什么?

时间:2017-01-05 15:30:57

标签: c++ hashtable

我的类中有一个名为“find()”的方法,它返回一个指向存储在类中的数据的指针(该类是哈希表,准确)。我觉得返回一个指向我班级数据的指针是一个坏主意,我还没有找到更好的东西。有关如何查找数据而不担心用户可能删除(修改)我的对象的任何建议? 这是find方法: (该类是哈希表,它完全可以找到)

Data* find(const Key& key) {
    if (isMember(key) == false) {
        return NULL;
    }
    int hash_idx = hash_function(key, table_size);
    return &(*((table[hash_idx])->find(key)));
}

2 个答案:

答案 0 :(得分:1)

你应该返回指向const的指针:

CRUD

答案 1 :(得分:0)

这是容器的常见问题。基本上归结为以下几点:

您需要两个版本的find

Data const * find(Key const &) const;
Data *       find(Key const &); // non-const

显然,您可以使用迭代器而不是指针,但这本身不会解决任何问题。然后你需要一个const - 迭代器const - 版本和一个(非 - const) - 迭代器(非const)版本。

为了获得有关这些设计决策的想法,我建议咨询STL即。 unordered_map在这种情况下。