使用std shared_ptr作为std :: map键
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用std shared_ptr作为std :: map键相关的知识,希望对你有一定的参考价值。
我在徘徊 - 我可以使用std::shared_ptr
作为地图键吗?
更具体地说 - 指针的引用计数器可能与分配给映射时的值不同。
它会在地图中正确识别吗?
答案
是的你可以。 std::shared_ptr
以适合地图密钥使用的方式定义operator<
。具体而言,仅比较指针值,而不是参考计数。
显然,尖头物体不是比较的一部分。否则,通过修改指向对象并使地图中的顺序与比较不一致,可以很容易地使地图无效。
另一答案
是的,你可以......但要小心。 operator<
是根据指针定义的,而不是指向的。
#include <memory>
#include <map>
#include <string>
#include <iostream>
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=
以上是关于使用std shared_ptr作为std :: map键的主要内容,如果未能解决你的问题,请参考以下文章
为啥不推荐使用 std::shared_ptr::unique() ?
使用相同的函数但重载不同的 std::tr1::shared_ptr<T> 和 std::shared_ptr<T>
`std::optional` 比 `std::shared_ptr` 和 `std::unique_ptr` 有啥优势?