我有以下数据类型
typedef std::map <std::string.std::string> leaf;
typedef std::map <std::string,leaf> child;
typedef std::vector<child> parent;
现在,如果我想在索引0处访问父元素,并且子元素具有键&#34; x&#34;然后对其值进行一些操作
这样做的第一种方式是:
parentobject[0]["x"]["r"]
但每当我想要访问该值时,我每次都需要重复这些索引。
这样做的第二种方式是: std :: string value = parentobject [0] [&#34; x&#34;] [&#34; r&#34;] 然后使用值对象。但是这种方法的问题是这一行会创建字符串的副本。
有没有更好的方法来访问变量而不创建副本?
答案 0 :(得分:2)
您可以使用引用来避免复制:
std::string & value = parentobject[x][y][z];
或者,你可以改为:
//define a lambda in the scope
auto get = [] (int x, std::string const & y, std::string const & z)
-> std::string &
{
return parentobject[x][y][z];
}
//then use it as many times as you want in the scope
std::string & value = get(0, "x", "r");
get(1, "y", "s") = "modify";
答案 1 :(得分:2)
使用参考:
const std::string& value = parentobject[0]["x"]["r"];
现在您可以在任何地方(在同一块范围内)引用value
,而无需再次执行地图查找。
如果确实需要,请删除const
。
请购买并阅读these books之一,以了解C ++的基本功能。