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

时间:2015-10-19 12:38:58

标签: c++ algorithm binary-tree

如果有以下载体 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 < / SUP>?

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

1。向量按顺序(逐级)存储二叉树的节点,其中每个左节点的l值为:父值-1 和每个右节点的{{1} },value是:父值+ 1 。功能

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

2 个答案:

答案 0 :(得分: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) ...

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

答案 1 :(得分:1)

  

有没有办法使用字符串名称搜索向量?

不,因为名称lr是局部变量 1 ,在字符串存储在向量中后会被销毁。存储后,矢量索引将成为存储字符串的&#34;名称&#34;

1。 lr rvalues ,并且在执行包含它们的函数后无法获取它们的地址。