使用对象名称识别容器中的对象?

Identify an object in a container using object name?

如果有如下向量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 搜索向量,如 "element id" 而不是字符串内容2

注意:我已经研究过 native property 寻找向量元素,但是,如果有其他方法,我很感兴趣。


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

2。比较当前节点值和先前节点值确定当前节点是左还是右。

在 C++ 中使用指向字符串的指针通常很奇怪,因为字符串内部包含指向 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) ...

如果你真的在每一步都构建新的不同对象,那么存储指针只有在你需要多态性时才有意义,但如果你不知道一组可能的对象,就很难测试身份。

Is there a way to search through the vector using the string names?

否,因为名称 lr 是局部变量 1,在字符串存储到向量中后会被销毁。存储后,矢量索引变为存储字符串的 "names"


1. lr右值,执行包含它们的函数后无法获取它们的地址。