使用对象名称标识容器中的对象

Identify an object in a container using object name?

本文关键字:对象 标识      更新时间:2023-10-16

如果存在以下向量1:

vector<string*> cont;   // cont[0] == "0"

,其中指向字符串的指针命名为lr;顺序添加,如下所示:

string r* = new string("1");
cont.emplace_back(r);

或:

string l* = new string("-1");
cont.emplace_back(l);

例如:如果给定一个节点的方向,如:"lrlrrr" .

是否有一种方法可以使用字符串名称lr搜索向量,作为"元素id"而不是字符串内容2?

注意:我已经研究了通过原生属性找到向量元素,但是,如果有其他方法,我很感兴趣。


<一口> 1。向量按顺序(逐层)存储二叉树的节点,其中每个左节点l的值为:父值- 1,每个右节点r的值为:父值+ 1

<一口> 2。

在c++中使用指向string的指针通常是奇怪的,因为string内部包含指向char的指针,给出双索引。但在这个用例中,如果存储指向相同常量对象的指针:

是有意义的。
static string _r = "1";
static string _l = "-1";
const string * r = &_r;
const string * l = &_l;

那么你可以写

cont.emplace_back(r);

cont.emplace_back(l);

因为当迭代指针向量时你可以使用if (cont[i] == r) ...

如果你真的在每一步构建新的不同的对象,存储指针只有在你需要多态性的时候才有意义,但是如果你没有一组已知的可能的对象,它将很难作为身份进行测试。

是否有一种方法来搜索通过使用字符串名称的向量?

不能,因为名称lr是局部变量1,在字符串存储到vector中后被销毁。存储后,向量索引成为存储字符串的"名称"


<一口> 1。

lr右值,它们的地址不能在包含它们的函数执行后获得。