c++ 使用标准shared_ptr作为标准::Map键

xwbd5t1u  于 2023-02-10  发布在  其他
关注(0)|答案(2)|浏览(365)

我正在漫游-我可以使用std::shared_ptr作为Map键吗?
更具体地,指针的引用计数器可能不同于它在被分配给Map时所具有的值。
它在Map上会被正确识别吗?

fcwjkofz

fcwjkofz1#

是的,你可以。std::shared_ptr定义了operator<的方式适合于Map键的使用。特别是,只比较指针值,而不比较引用计数。
显然,被指向的对象不是比较的一部分,否则,通过修改被指向的对象,使Map中的顺序与比较不一致,很容易使Map无效。

yeotifhr

yeotifhr2#

是的,您可以......但是要小心。operator<是根据指针定义的,而不是根据所指对象定义的。

int main() {

    std::map<std::shared_ptr<std::string>, std::string> m;

    std::shared_ptr<std::string> keyRef = std::make_shared<std::string>("Hello");
    std::shared_ptr<std::string> key2Ref = std::make_shared<std::string>("Hello");

    m[keyRef]="World";

    std::cout << *keyRef << "=" << m[keyRef] << std::endl;
    std::cout << *key2Ref << "=" << m[key2Ref] << std::endl;

}

印刷品

Hello=World
Hello=

相关问题