c++ - 指针映射的数组下标运算符

标签 c++ arrays pointers dictionary subscript

我有一个结构,里面有一个 std::map 指针。我正在尝试执行以下操作:

template <class T>
struct Foo
{
    std::map<std::string, T*> f;
    T& operator[](std::string s)
    {
        return *f[s];
    }
}

然后像这样使用它:

Foo<Bar> f;
f["key"] = new Bar();

但是按照它的编写方式,它会使程序崩溃。我也试过这样:

T* operator[](std::string s)
{
    return f[s];
}

但它无法编译。它在 f["key"] = new Bar() 行上说 "lvalue required as left operand of assignment"

我希望这很容易,因为我正在尝试返回一个指针并存储一个指针。我的代码有什么问题?

最佳答案

正确的做法是:

T*& operator[](std::string s)
{
    return f[s];
}

并像 f["key"] = new Bar() 那样调用它。

编辑:您应该开始通过 const 引用传递非基本类型:

T*& operator[](const std::string& s)

关于c++ - 指针映射的数组下标运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9373886/

相关文章:

c++ - 什么时候转换为 __m256 而不是加载是正确的?

arrays - ng-repeat 完成后触发 D3 重绘

Javascript 'new Array' 问题

c++ - 为什么要在函数指针或返回函数指针的函数编译之前放几十个*?

c - 指针赋值被忽略

c++ - 在 setupUi() 之后立即尝试设置 QLineEdit 的 setText() 时 QDialog 崩溃

c++:获取宽字符的ascii值

C++11 - 可以等待几个不同事件的线程?

Ruby:在数组中搜索特定条件的简单方法是什么?

c++ - 为什么 'this' 是指针而不是引用?